Ng-show не обновляется после изменения значения

JS

$scope.getDiffs = function () {
    return Module.getDiffs($scope.item.account_id, $scope.item.year)
      .then(function (res) {
        angular.forEach(res, function (v) {
            angular.forEach($scope.months, function (m) {
                if (m.month == v.month) {
                    m.diff = v.diff != 0;
                }
            });
        });
    });
};

Лезвие

<ul class = "nav nav-tabs mbtm-10">
    <li role = "presentation" ng-repeat = "m in months"
        ng-class = "{active: item.month == m.month}">
        <a href = "" ng-click = "item.month = m.month;fetchTrx()">
            @{{m.text}}
          <i ng-show = "m.diff != null" class = "fa fa-circle"
             ng-class = "{'text-success': !m.diff, 'text-danger': m.diff}">
          </i>
        </a>
    </li>
</ul>

Мой код будет отображать зеленый круг на интерфейсе кранов, если значение равно m.diff != null. Однако он не будет обновляться, если значение равно m.diff == null. Как только кран показывает зеленый круг, он показывает зеленый круг навсегда, независимо от того, какое значение.

Это немного сложно понять, не зная, как выглядят результаты. Лучше всего, если бы вы могли создать рабочий фрагмент, чтобы мы могли увидеть проблему. Я знаю, что это непростая задача, но чтобы получить хорошие ответы, нужно задавать хорошие вопросы :)

Mosh Feu 07.04.2019 18:23

Если бы мне пришлось угадывать, после изменения нет пробега $digest. Итак, должен ли Module.getDiffs возвращать angularjs promise (если это не так) или вы можете вызвать $scope.apply после изменения. stackoverflow.com/a/35072391/863110

Mosh Feu 07.04.2019 18:26

Почему код использует ng-show = "m.diff != null"? Похоже, он установлен либо на true, либо на false. Значение null — это объект, а не логическое значение.

georgeawg 07.04.2019 19:01
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
0
3
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте angular.copy:

$scope.getDiffs = function () {
    return Module.getDiffs($scope.item.account_id, $scope.item.year)
      .then(function (res) {
        angular.forEach(res, function (v) {
            angular.forEach($scope.months, function (m,i,arr) {
                if (m.month == v.month) {
                    m.diff = v.diff != 0;
                    arr[i] = angular.copy(m);
                }
            });
        });
    });
};

Другие вопросы по теме