我有一個效用函數NOTNULL()旨在與過濾器,像這樣使用:
...| filter:notNull()"
我需要更多的指令,這就是爲什麼我把它在$ rootScope中。
的問題是,我的濾波器不是called.I創建了一個示例plnkr:
http://plnkr.co/edit/Nq0iLw?p=preview
有人能幫忙嗎?爲什麼不調用過濾器並且不過濾我的項目?
PS。在過濾器這一表達不接縫空值工作:
...| filter:{myProp:!null}
我有一個效用函數NOTNULL()旨在與過濾器,像這樣使用:
...| filter:notNull()"
我需要更多的指令,這就是爲什麼我把它在$ rootScope中。
的問題是,我的濾波器不是called.I創建了一個示例plnkr:
http://plnkr.co/edit/Nq0iLw?p=preview
有人能幫忙嗎?爲什麼不調用過濾器並且不過濾我的項目?
PS。在過濾器這一表達不接縫空值工作:
...| filter:{myProp:!null}
[注:更新配置在相反的時間順序。]
UPDATE 2
首先,回答你的問題「爲什麼...| filter:{myProp:!null}
不工作:
這是因爲你試圖使用的語法是(根據the docs)僅適用於字符串值(並且null不是字符串值)。
您可以創建(並連接到您的應用程序)的自定義過濾器:
app.filter("notEqual", function() {
return function(items, key, value) {
var filtered = [];
items.forEach(function(item) {
if (item && (item[key] !== undefined)
&& (item[key] !== value)) {
filtered.push(item);
}
});
return filtered;
};
});
然後從任何像這樣的指令中使用它:
...| notEqual:'<keyName>':<valueToCompareAgainst>
如:
app.directive("mytag", function() {
return {
restrict: "E",
template: "<div ng-repeat=\"item in myModel | notEqual:'a':null\">"
+ " item: {{item}}"
+ "</div>",
scope: {
myModel: "="
}
};
});
另請參閱此其他short demo。
UPDATE
這可能是一個更好的主意,使用服務或工廠的實用方法,應該是提供給多個控制器/範圍,應該是定製的。例如: - 現在
app.factory("notNullFactory", function() {
var factory = {};
factory.notNull = function(caption) {
return function(item) {
console.log(caption + " " + JSON.stringify(item));
return (item !== null);
};
};
return factory;
});
,您可以使用notNullFactory
的notNull(...)
函數來創建自定義的過濾器功能:
app.directive("mytag", function(notNullFactory) {
return {
restrict: "E",
template: "<div>"
+ " <div ng-repeat=\"item in myModel | filter:notNull('Checking')\">"
+ " item: {{item}}"
+ " </div>"
+ "</div>",
scope: {
myModel: "="
},
link: function($scope) {
$scope.notNull = function(caption) {
return notNullFactory.notNull(caption);
};
}
};
});
還參見本等short demo。
這不是說你的過濾器沒有被調用,而是它沒有被定義。當你定義$scope.notNull
時,將其設置爲$rootScope.notNull
,後者是undefined。
相反,你可以擺脫鏈接財產和使用:
...| filter:$parent.notNull()...
還參見本short demo。
這將工作,假設父項是rootScope。我的標籤可以嵌套在其他控制器中,我可以如何做到這一點?如果我沒有被誤認爲是ng-click,它知道如何從父範圍中解析方法。 –
@OvidiuBuligan:看看我更新的答案。 – gkalpak
這正是我試圖避免的。這將是一個通用功能,我希望它可以在任何使用過濾器的指令中使用。但我認爲這也很重要,我如何到達這裏。我基本上想要過濾所有非null元素(所以沒有額外的功能)。這個「... | filter:{myProp:!null}」並沒有削減它,它適用於除null之外的所有值。我可以使默認表達式({myProp:!null})有效嗎? –
爲什麼不只是創建一個過濾器? –
,因爲我需要默認過濾器的額外功能。我只是想插入我的比較器 –