詳解AngularJS 過濾器的使用
考評(píng)員綜合查詢,查詢條件有:區(qū)域、所在單位、從事專業(yè)、資格證名稱、有效期至。

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

查詢都放到后臺(tái),這種以我們固有的思路去設(shè)計(jì)是可以實(shí)現(xiàn)的。
那就寫兩個(gè)接口,一個(gè)根據(jù)區(qū)域、所在單位、從事專業(yè)查詢?nèi)藛T表,一個(gè)根據(jù)資格證名稱、有效期至、區(qū)域、所在單位、從事專業(yè)查詢?nèi)藛T資質(zhì)表。不過是拼接謂語(yǔ)時(shí)多join幾下罷了。
然后前臺(tái)監(jiān)聽用戶選中的查詢條件,根據(jù)不同的查詢條件去請(qǐng)求相應(yīng)的接口。
雖然這樣可以實(shí)現(xiàn),但是此處的考評(píng)員的數(shù)量不會(huì)很多,我們大可以根據(jù)區(qū)域、所在單位、從事專業(yè)查詢?nèi)藛T,OneToMany直接將相應(yīng)的人員資質(zhì)帶出來(lái),然后再根據(jù)用戶選中的資格證名稱和有效期至作為條件對(duì)人員資質(zhì)進(jìn)行過濾,在前臺(tái)過濾出用戶想要的數(shù)據(jù)。
過濾器思路
過濾器,本質(zhì)就是一個(gè)方法,輸入什么,然后輸出什么。
符合此處需求傳入的參數(shù)應(yīng)該為人員,資格證名稱,有效期至,然后輸出為處理過的人員。
過濾人員的人員資質(zhì),可能對(duì)于不熟悉本項(xiàng)目的人不容易理解,所以這里以人和電腦為例,一個(gè)人,可以有多個(gè)電腦,需求是將這個(gè)人的不符合過濾條件的電腦從數(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) {
// 如果不符合條件,將該項(xiàng)從數(shù)組中移除
user.computers.splice(index, 1);
}
});
});
return users;
};
});
ng-repeat="user in users | yunzhiComputer: 'Mac'"
V層過濾的問題
因?yàn)榇颂幍目荚u(píng)員查詢需要進(jìn)行分頁(yè),因?yàn)閿?shù)據(jù)量較少,所以計(jì)劃在前臺(tái)分頁(yè)。
分頁(yè)之后,那循環(huán)中的users就是我們分頁(yè)完的人。
假如一共有兩頁(yè)數(shù)據(jù),每頁(yè)十條,第一頁(yè)有一條符合的,第二頁(yè)有三條符合的,如果使用者在第一頁(yè)進(jìn)行過濾,那最后顯示出來(lái)的就是一條數(shù)據(jù),顯示不出第二頁(yè)符合條件的數(shù)據(jù)。
C層過濾
原來(lái)是先在C層分頁(yè),然后在V層進(jìn)行過濾,為了避免分頁(yè)引起的數(shù)據(jù)過濾錯(cuò)誤,所以決定將過濾器放到C層使用,先過濾,后分頁(yè)。
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上給出的寫法,我比較喜歡這種寫法,畢竟我們寫過濾器,為了防止和已有的庫(kù)沖突,所以我們要將過濾器加上前綴yunzhi,然后還要在命名上大致描述這個(gè)過濾器的功能,這就使得過濾器的名稱很長(zhǎng),再加上Filter,那就更長(zhǎng)了,完全沒必要。畢竟$filter中的字符串還是可以讓他人去直接粘貼然后Ctrl + P直接查詢到這個(gè)過濾器。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- AngularJS自定義過濾器用法經(jīng)典實(shí)例總結(jié)
- AngularJS使用Filter自定義過濾器控制ng-repeat去除重復(fù)功能示例
- Angular使用過濾器uppercase/lowercase實(shí)現(xiàn)字母大小寫轉(zhuǎn)換功能示例
- Angular實(shí)現(xiàn)的內(nèi)置過濾器orderBy排序與模糊查詢功能示例
- Angularjs過濾器實(shí)現(xiàn)動(dòng)態(tài)搜索與排序功能示例
- Angularjs使用過濾器完成排序功能
- AngularJS常見過濾器用法實(shí)例總結(jié)
- angular過濾器實(shí)現(xiàn)排序功能
- 詳解angular ui-grid之過濾器設(shè)置
- angularJs使用$watch和$filter過濾器制作搜索篩選實(shí)例
相關(guān)文章
利用Angularjs中模塊ui-route管理狀態(tài)的方法
這篇文章主要給大家介紹了如何用Angularjs中的模板ui-route來(lái)管理狀態(tài)的方法,文中通過示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以一起來(lái)學(xué)習(xí)學(xué)習(xí)。2016-12-12
cnpm加速Angular項(xiàng)目創(chuàng)建的方法
這篇文章主要介紹了cnpm加速Angular項(xiàng)目創(chuàng)建的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-09-09
Angular JS數(shù)據(jù)的雙向綁定詳解及實(shí)例
這篇文章主要介紹了Angular JS數(shù)據(jù)的雙向綁定詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-12-12
理解Angular的providers給Http添加默認(rèn)headers
本篇文章主要介紹了理解Angular的providers給Http添加默認(rèn)headers,具有一定的參考價(jià)值,有興趣的同學(xué)可以了解一下2017-07-07
AngularJS select加載數(shù)據(jù)選中默認(rèn)值的方法
下面小編就為大家分享一篇AngularJS select加載數(shù)據(jù)選中默認(rèn)值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-02-02

