選項1:
你正在嘗試創建稱爲謂詞函數。你可以閱讀起來就可以了here(只是滾動到function(value, index, array)
)
謂詞函數可用於寫入任意過濾器。該函數是爲數組的每個元素調用的,元素,索引和整個數組本身都是參數。
最終的結果是這些元素的數組的謂詞
返回屬實,請參見工作示例here
如果你輸入「當然」,你會看到兩個學生,如果你輸入「course1」你只會看到第一個學生。
<div ng-controller="TestController" class="panel panel-primary">
<form class="form-inline">
<div class="form-group">
<input type="text" class="form-control" placeholder="Filter" ng-model="studentFilter">
</div>
</form>
<div class="panel-heading">Students</div>
<ul class="list-group">
<li class="list-group-item" ng-repeat="student in students | filter:onFilterStudents">
{{student.firstName}} {{student.surname}}
<ul class="list-group">
<li class="list-group-item" ng-repeat="course in student.courses">
{{course.courseName}}-{{course.courseCode}}
</li>
</ul>
</li>
</ul>
</div>
JS:
var myApp = angular.module('myApp', []);
myApp.controller('TestController', ['$scope', function($scope) {
$scope.students = [{
firstName: 'John',
surname: 'Doe',
courses: [{
courseName: 'course1',
courseCode: 'CC1'
}, {
courseName: 'course2',
courseCode: 'CC7'
}]
}, {
firstName: 'Jane',
surname: 'Doe',
courses: [{
courseName: 'course3',
courseCode: 'CC2'
}, {
courseName: 'course4',
courseCode: 'CC3'
}]
}];
$scope.onFilterStudents = function(value, index, array) {
if ($scope.studentFilter === '' || $scope.studentFilter === null || $scope.studentFilter === undefined) {
return true;
}
return value.courses.filter(function(course) {
console.log(course);
return course.courseName.toLowerCase().indexOf($scope.studentFilter.toLowerCase()) > -1 || course.courseCode.toLowerCase().indexOf($scope.studentFilter.toLowerCase()) > -1;
}).length > 0;
};
}]);
選項2
您可以使用對象爲filter expression(滾動的課程代碼 「CC1」
HTML同樣的罪名對象:模式ob ...),請參閱工作示例here
模式對象可用於過濾數組所包含對象的特定屬性。例如{名稱:「M」,電話:「1」}謂詞將返回一個包含屬性名稱包含「M」和屬性手機包含「1」的項目數組。可以使用特殊的屬性名稱$(如在{$:「text」}中)來接受對該對象的任何屬性或其嵌套對象屬性的匹配。這相當於如上所述的簡單子串匹配字符串。可以通過在字符串前加上!來取代謂詞。例如{name:「!M」}謂詞將返回一個包含屬性名稱不包含「M」的項目數組。
HTML:
<div ng-controller="TestController" class="panel panel-primary">
<form class="form-inline">
<div class="form-group">
<input type="text" class="form-control" placeholder="Filter" ng-model="studentFilter">
</div>
</form>
<div class="panel-heading">Students</div>
<ul class="list-group">
<li class="list-group-item" ng-repeat="student in students | filter:{courses:{$:studentFilter}}">
{{student.firstName}} {{student.surname}}
<ul class="list-group">
<li class="list-group-item" ng-repeat="course in student.courses">
{{course.courseName}}-{{course.courseCode}}
</li>
</ul>
</li>
</ul>
</div>
JS:
var myApp = angular.module('myApp', []);
myApp.controller('TestController', ['$scope', function($scope) {
$scope.students = [{
firstName: 'John',
surname: 'Doe',
courses: [{
courseName: 'course1',
courseCode: 'CC1'
}, {
courseName: 'course2',
courseCode: 'CC7'
}]
}, {
firstName: 'Jane',
surname: 'Doe',
courses: [{
courseName: 'course3',
courseCode: 'CC2'
}, {
courseName: 'course4',
courseCode: 'CC3'
}]
}];
}]);
如果不需要自定義代碼或先進的過濾,我選擇選項2
請出示您的過濾功能,因爲我們如果你沒有展示你是如何實現它的話,你將無法看到有什麼問題。也許無論如何,創建自定義過濾器會更好,而不是使用內置的Angular過濾器函數調用函數。 –
@pkeuter自定義過濾器功能尚未實現。所有它到目前爲止是console.log學生,當從veiw調用函數時,它是未定義的。這是第一個問題:/ –
我知道它還沒有完全實現,但是你開始實現它,並且正在獲取該函數中的錯誤消息。請展示它,以便我們可以看到你在這裏嘗試做什麼。 –