AngularJS $переменная для изменения размера
У меня есть следующая переменная $rootScope, которую я использую для сохранения текущего зарегистрированного уровня привилегий пользователя, затем я обращаюсь к этой переменной с других контроллеров. Есть ли способ наблюдать переменную rootScope для изменений, чтобы обновлять определенные переменные контроллеров с любыми изменениями в переменной области корневого объекта? Ниже приведен код, который я использую до сих пор, может ли кто-нибудь рассказать мне, что я делаю неправильно, и как его исправить? Благодаря
В app.js под .run:
$rootScope.uPLevel = 0;
.controller
$scope.$watch($rootScope.uPLevel, function() {
$scope.userPLevel = $rootScope.uPLevel;
}, true);
Ответы
Ответ 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 часы остаются навсегда.