Ответ 1
Несколько. Вы можете включить, если вы включили службу Angular $window
(что более безопасно, как описано в документах, а не напрямую на window
):
app.controller('myCtrl', function ($scope,$window) {...}
И затем используйте функцию часов в качестве первого параметра для $watch
следующим образом:
$scope.$watch(
function () {
return $window.test
}, function(n,o){
console.log("changed ",n);
}
);
Но обратите внимание, что $watch
не будет выполняться до тех пор, пока что-то не вызовет Angular, чтобы выполнить $digest. Один из возможных способов сделать это - обернуть свой устаревший код в $scope.$apply
или вызвать $digest
после того, как устаревший код будет эксплицирован. Вот некоторая хорошая документация по этому вопросу.
В принципе, всякий раз, когда изменение происходит за пределами Angular (например, это обычная проблема, когда jQuery вызывает изменение), что-то должно сказать Angular, чтобы посмотреть, что-то изменилось. Это один из способов Angular поддерживает разумную производительность.