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
. Как только кран показывает зеленый круг, он показывает зеленый круг навсегда, независимо от того, какое значение.
Если бы мне пришлось угадывать, после изменения нет пробега $digest
. Итак, должен ли Module.getDiffs
возвращать angularjs promise
(если это не так) или вы можете вызвать $scope.apply
после изменения. stackoverflow.com/a/35072391/863110
Почему код использует ng-show = "m.diff != null"
? Похоже, он установлен либо на true
, либо на false
. Значение null
— это объект, а не логическое значение.
Используйте 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);
}
});
});
});
};
Это немного сложно понять, не зная, как выглядят результаты. Лучше всего, если бы вы могли создать рабочий фрагмент, чтобы мы могли увидеть проблему. Я знаю, что это непростая задача, но чтобы получить хорошие ответы, нужно задавать хорошие вопросы :)