У меня есть следующий код для контроллера. При начальной загрузке closeBtnText
устанавливается правильно на основе hasClosebtn
, но когда эта переменная обновляется позже, она не обновляется. Использует метод для обновления единственный способ?
app.controller("appCtrl", function($scope){
$scope.hasClosebtn = true;
$scope.closeBtnText = ($scope.hasClosebtn) ? "test" : 'sdffffffff';
});
});
Если вам просто нужно отобразить его в DOM, это должно работать:
<div ng-controller="appCtrl">
<p>{{ hasClosebtn ? "test" : "sdffffffff" }}</p>
<div>
Если вам нужно его сохранить в $scope.closeBtnText
, вы можете использовать $watch
:
$scope.$watch('hasClosebtn', function(newValue, oldValue) {
$scope.closeBtnText = newValue ? 'test' : 'sdffffffff';
});
Чтобы дать представление о том, почему переменная $scope
не обновляется в текущем коде, подумайте об этом сценарии:
app.controller('appCtrl', function($scope) {
$scope.hasClosebtn = true;
$scope.closeBtnText = ($scope.hasClosebtn) ? 'test' : 'sdffffffff';
// $scope.closeBtnText => 'test'
$scope.hasClosebtn = false;
// $scope.closeBtnText => 'test'
});
Поток кода не возвращается, чтобы переоценить ваше тернарное выражение. Обнаружение изменения в $scope.hasClosebtn
происходит в цикле $digest
.
Он не обновляется, потому что ваш $scope.closeBtnText
инициализируется для проверки.
Если вы добавите и ngClick к своей кнопке, которая переключит значение текста, вы увидите изменение при нажатии на него
Поскольку это новичок в вопросе углового вопроса, я дам вам ссылку на doc для ngClick для дальнейшего изучения. NgClick
$scope.$watch
.