У меня $scope.event.privacy = 0;
Когда я пытаюсь сделать {{ event.privacy | eventPrivacyFilter }}
{{ event.privacy | eventPrivacyFilter }}
фильтр ничего не делает... Но если $scope.event.privacy = 1 or 2 or.....
он работает.
Используется ли фильтр в AngularJs
если value = 0
?
Фильтр:
(function() {
'use strict';
angular.module('eventMod').filter('eventPrivacyFilter', eventPrivacyFilter);
function eventPrivacyFilter(EventPrivacyRegistry) {
return function(privacyId) {
if (!privacyId) {return null;}
return EventPrivacyRegistry.getById(privacyId).name;
};
}
})();
Regist:
(function() {
'use strict';
angular.module('eventMod').service('EventPrivacyRegistry', EventPrivacyRegistry);
function EventPrivacyRegistry(_) {
return {
getList: function () {
return [
{ id: 0, name: '1'},
{ id: 1, name: '2'},
{ id: 2, name: '3'},
{ id: 3, name: '4'}
];
},
getById: function (privacyId) {
console.log(privacyId);
console.log(_.find(this.getList(), {id: privacyId }));
return _.find(this.getList(), {id: privacyId });
}
};
}
})();
if (!privacyId) {return null;}
- это оператор, который возвращает null, когда $scope.event.privacy = 0
потому что if(!0)
значение true.
И поэтому EventPrivacyRegistry.getById(privacyId).name;
в этом случае не выполняется.
Решение было бы сравнить с null
и undefined
следующим образом:
if(privacyId === null || privacyId === undefined) {
return;
}
Это не имеет никакого отношения к AngularJs. Это falsy value
javascript.
Zero (0) оценивается как ложное значение в вашем примере. Если вы хотите строгого сравнения, вам нужно явно запросить его.
Так измените свой код, как это
// old code
{{ event.privacy | eventPrivacyFilter }}
// new code
{{ event.privacy != null | eventPrivacyFilter }}
Подробнее о сравнении фальшивых и правдивых ценностей читайте здесь http://www.sitepoint.com/javascript-truthy-falsy/