ПРИМЕЧАНИЕ . Это не работает, когда View и Controller связаны в маршруте или через объект определения директивы. То, что показано ниже, работает только тогда, когда в HTML есть «SomeController as SomeCtrl». Точно так же, как Марк В. указывает в комментарии ниже, так же, как он говорит, что лучше делать, как Богдан.
Я использую: var vm = this;
в начале контроллера, чтобы убрать слово «это» с моего пути. Тогда vm.name = 'Max';
и в часы я return vm.name
. Я использую «vm» так же, как @Bogdan использует «self». Это var, будь то «vm» или «self», необходимо, поскольку слово «this» имеет другой контекст внутри функции. (поэтому возвращение this.name не сработает) И да, вам нужно ввести $ scope в ваше красивое решение "controller as", чтобы достичь $ watch. См. Руководство по стилю Джона Папы: https://github.com/johnpapa/angularjs-styleguide#controllers
function SomeController($scope, $log) {
var vm = this;
vm.name = 'Max';
$scope.$watch('vm.name', function(current, original) {
$log.info('vm.name was %s', original);
$log.info('vm.name is now %s', current);
});
}