Принудительный повторный рендеринг элемента после изменения ng-if - PullRequest
0 голосов
/ 10 июля 2020

Я визуализирую элемент на основе значения ng-if:

 <div ng-if="!isUserFollowing">
        <button type="submit" class="btn btn-primary pull-right" style="margin-right:40px; margin-top:15px;position:relative;z-index:1;" onclick="angular.element(this).scope().followRelease()">
            <i class="fa fa-bell" aria-hidden="true"></i> Follow Release
        </button>
    </div>

Изменение логического значения само по себе не приводит к повторному отображению элемента, но это произойдет, если я использую $ scope. $ применить (). Пока моя установка работает, я не совсем уверен, что вызов $ scope. $ Apply () - хорошая практика, чтобы заставить мой элемент повторно отрисоваться. Каковы мои альтернативы?

Вот мой пример использования:

$ scope.isUserFollowing = result; $ scope. $ apply ();

1 Ответ

0 голосов
/ 11 июля 2020

Вам требуется для вызова $scope.$apply(), когда действие / событие, изменившее переменную $scope.isUserFollowing, вызывается / запускается методами, которые не соответствуют AngularJS.

Например, если вы сделаете что-то вроде этого:

var app = angular.module('app', [])
  .controller('ctrl', function(
    $scope,
    $timeout
  ) {
    $scope.firstResult = 10;
    $scope.secondResult = 100;

    setTimeout(function() {
      $scope.firstResult = 20;
    }, 2000);

    $timeout(function() {
      $scope.secondResult = 200;
    }, 1000);

  });;


angular.bootstrap(document.body, ['app']);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>

<body ng-controller="ctrl">
  {{firstResult}} {{secondResult}}
</body>

Вы увидите, что через 1 секунду значение $scope.secondResult изменится, но через 2 секунды значение $scope.firstResult не изменится. Это потому, что setTimeout не равен handled на AngularJS, а $timeout -. Чтобы заставить его работать, вы можете просто добавить $scope.$apply() в setTimeout.

. Вы всегда должны быть осторожны и пытаться использовать конструкции из angular (т.е. ng-click вместо click), потому что те действия управляются angular и включены в цикл дайджеста модели MVC, и поэтому, если Модель изменяет представление, и Контроллер обновляются соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...