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

Добавить часы на переменную без видимости в 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? Я знаю, как это будет сделано с переменной области, но у меня есть сценарии, где мне нужно проверить множество сложных переменных.

4b9b3361

Ответ 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...
});