Подтвердить что ты не робот

AngularJS $переменная для изменения размера

У меня есть следующая переменная $rootScope, которую я использую для сохранения текущего зарегистрированного уровня привилегий пользователя, затем я обращаюсь к этой переменной с других контроллеров. Есть ли способ наблюдать переменную rootScope для изменений, чтобы обновлять определенные переменные контроллеров с любыми изменениями в переменной области корневого объекта? Ниже приведен код, который я использую до сих пор, может ли кто-нибудь рассказать мне, что я делаю неправильно, и как его исправить? Благодаря

В app.js под .run:

 $rootScope.uPLevel = 0;

.controller

   $scope.$watch($rootScope.uPLevel, function() {
            $scope.userPLevel = $rootScope.uPLevel;
   }, true);
4b9b3361

Ответ 1

Первый параметр $watch должен быть либо строкой, либо функцией (docs). Прямо сейчас вы передаете ему значение $rootScope.uPLevel при инициализации контроллера.

$scope.$watch(function() {
  return $rootScope.uPLevel;
}, function() {
  $scope.userPLevel = $rootScope.uPLevel;
}, true);

Два оповещения:

  • Возможно, разумно сохранить это значение в службе вместо $rootScope.
  • Если uPLevel является целым числом (как следует из вашего примера), вам не нужно передавать true в качестве третьего параметра - только для массивов и объектов. Если вы хотите посмотреть коллекцию, я предлагаю вместо этого использовать $watchCollection.

Ответ 2

Я рекомендую просматривать переменные $rootScope следующим образом:

$scope.$watch('$root.uPLevel', function() {
    $scope.userPLevel = $rootScope.uPLevel;
});

Таким образом, когда текущая директива/контроллер уничтожается. Он также очищает часы. В случае $rootScope. $Watch часы остаются навсегда.