Работает ли фильтр в AngularJs, если значение = 0?

0

У меня $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 });
            }
        };

    }
})();
  • 1
    показать код фильтра.
  • 0
    Пожалуйста, поместите еще немного кода здесь. Мы ничего не видим.
Показать ещё 1 комментарий
Теги:
angularjs-filter

2 ответа

2
Лучший ответ

if (!privacyId) {return null;} - это оператор, который возвращает null, когда $scope.event.privacy = 0 потому что if(!0) значение true.

И поэтому EventPrivacyRegistry.getById(privacyId).name; в этом случае не выполняется.

Решение было бы сравнить с null и undefined следующим образом:

if(privacyId === null || privacyId === undefined) {
    return;
}
  • 0
    ооо спасибо! Я прощаюсь об этом (
  • 0
    пожалуйста!
1

Это не имеет никакого отношения к AngularJs. Это falsy value javascript.

Zero (0) оценивается как ложное значение в вашем примере. Если вы хотите строгого сравнения, вам нужно явно запросить его.

Так измените свой код, как это

// old code
{{ event.privacy | eventPrivacyFilter }}

// new code
{{ event.privacy != null | eventPrivacyFilter }}

Подробнее о сравнении фальшивых и правдивых ценностей читайте здесь http://www.sitepoint.com/javascript-truthy-falsy/

  • 0
    Благодарю. Я понял.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню