Добавить часы на переменную без видимости в angularjs
Есть ли способ добавить часы к переменной без области видимости. Я хочу добавить часы к локальной переменной. У меня есть что-то вроде этого
function EditAssetRegistryController(assetregistryService, manufacturerService, assettypeService, projectService, $localStorage, $routeParams) {
var vm = this;
vm.manufacturers = [];
vm.projects = [];
vm.asset_types = [];
vm.ch_group_uniq = 'none';
}
Здесь есть способ добавить часы к vm.ch_group_uniq?
Я знаю, как это будет сделано с переменной области, но у меня есть сценарии, где мне нужно проверить множество сложных переменных.
Ответы
Ответ 1
$watch
не будет работать как обычный синтаксис с controllerAs
. Вам нужно привязать его к $scope
, а затем вы можете посмотреть эту переменную:
код
$scope.$watch(angular.bind(this, function (ch_group_uniq) {
return this.ch_group_uniq;
}), function (newVal, oldVal) {
console.log('Name changed to ' + newVal);
});
Вот ссылка Тодд-девизная статья
Ответ 2
Ну, вы можете легко добавить часы для чего-либо, передав функцию в качестве первого параметра:
$scope.$watch(function watchFunction(scope) {
return vm.ch_group_uniq
}, handler)
Несколько вещей, которые следует учитывать: watchFunction
должно возвращать одно и то же значение, если ничего не изменилось. Это может привести к некоторым ошибкам, например, возврату результата некоторых операций с массивами: [1,2,3].filter(...)
всегда будет возвращать новый массив и приведет к бесконечному циклу $digest
. Также обратите внимание на третий параметр $scope.$watch
, который указывает, следует ли использовать сравнение идентичности, или angular.equals
при сравнении значений. (Ознакомьтесь с документами для получения дополнительной информации - https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch)
Однако ваша конкретная проблема, похоже, пытается использовать controllerAs
и пользовательские $watch
-es. Там очень удобная библиотека, которая специально решает эту проблему: https://github.com/christopherthielen/angular-360-no-scope
Ответ 3
Более чистый синтаксис с использованием ES6
$scope.$watch(() => {
return this.thingToWatch;
}, (newVal, oldVal) => {
// Your code here...
});