【发布时间】:2016-06-07 00:00:19
【问题描述】:
我正在尝试构建一个延迟消息框。我观察到 apply 在应用程序启动时被调用,如 API 文档中所述。但是当观察值改变时,它不会被调用。 MessageCtrl 是内部控制器。为什么在更改 message var 后不调用 watch?
angular.module('myApp',[]).controller('MessageCtrl', function($scope) {
$scope.getMessage = function() {
setTimeout(function() {
$scope.$parent.message = {text : ""};
$scope.$apply(function() {
console.log('message:' + $scope.$parent.message.text);
});
}, 2000);
}
$scope.getMessage();
})
.controller('MainCtrl',function($scope){
$scope.message={text:"oi"};
$scope.$watch("message", function(newValue, oldValue){
console.log("watch " + $scope.message.text);
});
});
内部控制器 MessageCtrl 将获取文本消息并显示 2 秒。
<body ng-app="myApp" ng-controller="MainCtrl">
<div ng-controller="MessageCtrl">
Message:{{message.text}}
</div>
</body>
【问题讨论】: