1. 程式人生 > >ionic-基於angularjs和javascript實用的頂部搜尋過濾元件

ionic-基於angularjs和javascript實用的頂部搜尋過濾元件

實現的功能:
1、定義模板主題     
2、自定義icon圖示     
3、高內聚低偶合,只需簡單配置即可使用     
4、區域性搜尋(在已顯示的頁面內容中進行過濾搜尋)     
5、全域性搜尋(根據關鍵詞訪問伺服器進行搜尋)     
6、動畫顯示出現,包括頂部下拉顯示搜尋元件和從左向右顯示元件     

具體的用法:     
1、引入js和css:

<link rel="stylesheet" type="text/css" href="js/filterBar/ionic.filter.bar.css">      
<script type="text/javascript" src="js/filterBar/ionic.filter.bar.js"></script>

2、在modual中包含依賴模組bing.ionic.filter.bar

angular.module('starter',['ionic','bing.ionic.filter.bar'];    

3、配置說明

(1)初始化配置$ionicFilterBarConfigProvider
.config(function($ionicFilterBarConfigProvider) {
//filterBar的主題,可以由以下這些值,預設light
light,stable,positive,calm,balanced,energized,assertive,royal,dark
$ionicFilterBarConfigProvider.theme('calm');

//清除搜尋框icon圖示,預設ion-ios-close
    $ionicFilterBarConfigProvider.clear('ion-ios-close');

    //input輸入框裡顯示的icon,預設ion-ios-search-strong
    $ionicFilterBarConfigProvider.search('ion-ios-search-strong');


    //是否顯示背景幕,true OR false
    $ionicFilterBarConfigProvider.backdrop();


    //動畫變換,horizontal(水平) OR vertical(垂直) 
    $ionicFilterBarConfigProvider.transition('vertical');

    //搜尋框佔位符提示
    $ionicFilterBarConfigProvider.placeholder('搜尋');

})

(2)使用服務時的動態配置,相同的項將會覆蓋初始配置

$ionicFilterBar:是一個服務,在控制器依賴後,直接如下使用,動態配置

filterBarInstance:是返回的一個取消例項函式    
比如再重新整理的時候,將filterBar取消    
*$scope.refreshItems = function() {
     if(filterBarInstance) {
       filterBarInstance();
       filterBarInstance = null;
     }
}

$scope.items:就是所有的顯示的item資料

配置項:

items:存如的所有item資料,陣列型別

update:搜尋之後的回撥呼叫資料,第一個引數filteredItems是搜尋返回的資料,傳給$scope.items顯示
第二個引數filterText是搜尋的關鍵詞

cancel:filterBar刪除後觸發的回撥函式

done:filterBar顯示出來後觸發的回撥函式

delegateHandle:檢視的delegate-handle,指定item資料由哪一個檢視顯示,必須設定

isGloableSearch:全域性搜尋還是在已有的內容上進行過濾,true代表全域性搜尋,false代表是過濾

resource: 如果isGloableSearch=true,則resource必須設定,值是一個factory的resource物件,定義請求遠端服務的搜尋,必定寶航一個search方法
eg:
app.factory('$searchResource',['$resource',function($resource){
return $resource('http://192.168.1.101/lianxi/XML/advanced/api/web/v1/users/:userId',{'userId':'@id','access-token':123456789},{
     search: {
     method: 'get', 
     isArray: true,
     cache: true,

     //過濾器處理
     interceptor: {
   response: function(response) {
   return response.data;
     
   },
  responseError: function(rejection) {
     
   }
     }
 },
 
  });

}]);

在我們的$ionicFilterBar這個服務內部程式碼裡的處理:
scope.resource.search({'keywords':filterText}, function(result){
  // 返回的是json資料 | array,有服務端或者resource服務提前處理
  if(result) {

    // 隱藏載入提示
    $ionicLoading.hide();

    // 呼叫update函式,在頁面顯示資料

    $timeout(function() {
      // 更新查詢到的資料,呼叫回撥函式
      scope.update(result,filterText);

      // 同時滾動條回到頂部
      scope.scrollItemsTop();
    },100);

  }else {
    return false;
}

/*
上面可以看到$searchResource這個服務定義請求的url和一些預設引數,底層程式碼將會組合keywords,然後訪問遠端的伺服器搜尋,最終返回資料,然後呼叫update()回撥顯示搜尋到的資料。

*/

cancelText: 區域性搜尋是顯示的取消按鈕,預設'取消',
            
searchText: 全域性搜尋是顯示的按鈕,預設'搜尋',
            
isLoadingBackdrop: 全域性搜搜時是否顯示載入圖背景幕,預設true,

loadingText: 全域性搜搜時自定義載入的文字,預設'正在載入',

$scope.showFilterBar = function () {

    filterBarInstance = $ionicFilterBar.show({
        items: $scope.items,
        update: function (filteredItems, filterText) {
          $scope.items = filteredItems;
          if (filterText) {
            console.log(filterText);
          }
        },
        cancel:function() {
          console.log('cancel done');
        },
        done:function() {
          console.log('show done');
        },
        delegateHandle:'accountscroll',

        isGloableSearch:false,

        resource:$searchResource;

        cancelText: '取消',
        searchText:'搜尋'

        isLoadingBackdrop:''
        loadingText:''

    });
};