欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解AngularJS 過濾器的使用

 更新時間:2018年06月02日 10:56:04   作者:張喜碩  
AngularJS 過濾器可用于轉(zhuǎn)換數(shù)據(jù),這篇文章主要介紹了詳解AngularJS 過濾器的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

考評員綜合查詢,查詢條件有:區(qū)域、所在單位、從事專業(yè)、資格證名稱、有效期至。

如果我們的所有數(shù)據(jù)查詢都放在后臺的話。依據(jù)拼接的查詢條件,選擇區(qū)域、所在單位、從事專業(yè)查詢的是人員表,而選擇資格證名稱、有效期至查詢的是人員資質(zhì)表。

查詢都放到后臺,這種以我們固有的思路去設(shè)計是可以實現(xiàn)的。

那就寫兩個接口,一個根據(jù)區(qū)域、所在單位、從事專業(yè)查詢?nèi)藛T表,一個根據(jù)資格證名稱、有效期至、區(qū)域、所在單位、從事專業(yè)查詢?nèi)藛T資質(zhì)表。不過是拼接謂語時多join幾下罷了。

然后前臺監(jiān)聽用戶選中的查詢條件,根據(jù)不同的查詢條件去請求相應(yīng)的接口。

雖然這樣可以實現(xiàn),但是此處的考評員的數(shù)量不會很多,我們大可以根據(jù)區(qū)域、所在單位、從事專業(yè)查詢?nèi)藛T,OneToMany直接將相應(yīng)的人員資質(zhì)帶出來,然后再根據(jù)用戶選中的資格證名稱和有效期至作為條件對人員資質(zhì)進行過濾,在前臺過濾出用戶想要的數(shù)據(jù)。

過濾器思路

過濾器,本質(zhì)就是一個方法,輸入什么,然后輸出什么。

符合此處需求傳入的參數(shù)應(yīng)該為人員,資格證名稱,有效期至,然后輸出為處理過的人員。

過濾人員的人員資質(zhì),可能對于不熟悉本項目的人不容易理解,所以這里以人和電腦為例,一個人,可以有多個電腦,需求是將這個人的不符合過濾條件的電腦從數(shù)組中移除。

webApp.filter('yunzhiComputer', function() {
  return function(users, computerName) {
    angular.forEach(users, function(user) {
      angular.forEach(user.computers, function(computer, index) {
        if (computer.name !== computerName) {
          // 如果不符合條件,將該項從數(shù)組中移除
          user.computers.splice(index, 1);
        }
      });
    });
    return users;
  };
});
ng-repeat="user in users | yunzhiComputer: 'Mac'"

V層過濾的問題

因為此處的考評員查詢需要進行分頁,因為數(shù)據(jù)量較少,所以計劃在前臺分頁。

分頁之后,那循環(huán)中的users就是我們分頁完的人。

假如一共有兩頁數(shù)據(jù),每頁十條,第一頁有一條符合的,第二頁有三條符合的,如果使用者在第一頁進行過濾,那最后顯示出來的就是一條數(shù)據(jù),顯示不出第二頁符合條件的數(shù)據(jù)。

C層過濾

原來是先在C層分頁,然后在V層進行過濾,為了避免分頁引起的數(shù)據(jù)過濾錯誤,所以決定將過濾器放到C層使用,先過濾,后分頁。

Filter - AngularJS

angular.module('FilterInControllerModule', []).
controller('FilterController', ['filterFilter', function FilterController(filterFilter) {
 this.array = [
  {name: 'Tobias'},
  {name: 'Jeff'},
  {name: 'Brian'},
  {name: 'Igor'},
  {name: 'James'},
  {name: 'Brad'}
 ];
 this.filteredArray = filterFilter(this.array, 'a');
}]);

第一種是AngularJS官方給出的寫法,直接過濾器名加上Filter可以直接依賴注入過濾器,例如我們這里的過濾器叫做yunzhiComputer,我們可以直接依賴注入yunzhiComputerFilter

How to use a filter in a controller - StackOverflow

function myCtrl($scope, $filter)
{
  $filter('filtername')(arg1,arg2);
}

這是StackOverflow上給出的寫法,我比較喜歡這種寫法,畢竟我們寫過濾器,為了防止和已有的庫沖突,所以我們要將過濾器加上前綴yunzhi,然后還要在命名上大致描述這個過濾器的功能,這就使得過濾器的名稱很長,再加上Filter,那就更長了,完全沒必要。畢竟$filter中的字符串還是可以讓他人去直接粘貼然后Ctrl + P直接查詢到這個過濾器。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論