我已经编写了一个指令来编辑应用的标签。
每种文化(例如:en-US)每个属性最多可包含4个标签,这些标签包含在表格中:
$scope.suffixes = ["DisplayName", "Description", "Hint", "Help"];
<div class="clear" ng-repeat="label in labelModel | filter:cultureFilter">
<select ng-options="suffix as suffix for suffix in suffixes | filter:suffixFilter(suffix, label.suffix)" ng-model="label.suffix" />
</div>
这是我的控制器功能:
$scope.cultureFilter = function (label) {
return (label.culture == $scope.labelState.culture);
}
$scope.suffixFilter = function (suffix, selectedValue) {
//arguments are now : [undefined, "DisplayName"]
return true; // :-(
}
到目前为止,我已经能够根据文化过滤ng-repeat。
但是对于我的ng-options,我必须过滤已经使用过的字符串。但我还必须保持选择当前值。如何判断我的过滤器是否应该过滤某些值,因为它是当前选定的值?
修改
现在,我能够收到所选的值,但我无法再接收后缀了
答案 0 :(得分:2)
您几乎使用过滤功能,但在您的情况下,我认为您真正需要的是自定义过滤器。它们实际上是无足轻重的。
过滤器只是在.filter()
助手注册的工厂功能。
您只需要一个接受您关注的参数。
//Outer factory function
function SuffixFilter(){
//Inner function which is our filter
return function(items, ignoredItem){
var filteredItems = [];
angular.forEach(items, function(item){
//Your filtering logic may be more complex
// than this. It's only an example
if(item == someCriteria || item == ignoredItem){
filteredItems.push(item);
}
});
return filteredItems;
}
}
angular.module('myModule')
.filter('suffixFilter', SuffixFilter);
一旦您注册了后缀过滤器,就可以使用您关心的参数在标记中调用。 Angular处理剩下的事情。
<!-- Pass in the current selection to ignore -->
suffixes | suffixFilter:label.suffix
函数参数并没有真正起作用。它期望评估一个可以被调用的函数。
技术上 您可以返回一个函数并使用闭包来完成您想要的任务。像这样:
<!-- In your markup -->
filter:suffixFilter(label.suffix)
//In your controller
$scope.suffixFilter = function (selectedValue) {
//this is your actual filter here
return function(item){
//You have access to 'selectedValue' via
// a closure
return item == someCriteria || item === selectedValue;
}
}
所以,虽然这当然是可能的,但我认为自定义过滤器在语义上更清晰。