Переменная AngularJS зависит от другой переменной из области видимости

0

У меня есть следующий код для контроллера. При начальной загрузке closeBtnText устанавливается правильно на основе hasClosebtn, но когда эта переменная обновляется позже, она не обновляется. Использует метод для обновления единственный способ?

app.controller("appCtrl", function($scope){

    $scope.hasClosebtn = true;
    $scope.closeBtnText = ($scope.hasClosebtn) ? "test" : 'sdffffffff';
    });
});
  • 0
    Вы можете использовать $scope.$watch .
Теги:

2 ответа

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

Если вам просто нужно отобразить его в 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.

1

Он не обновляется, потому что ваш $scope.closeBtnText инициализируется для проверки.

Если вы добавите и ngClick к своей кнопке, которая переключит значение текста, вы увидите изменение при нажатии на него

Поскольку это новичок в вопросе углового вопроса, я дам вам ссылку на doc для ngClick для дальнейшего изучения. NgClick

Ещё вопросы

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