我的应用程序在 $rootScope 中初始化一个对象图,像这样......
var myApp = angular.module('myApp', []);
myApp.run(function ($rootScope) {
$rootScope.myObject = { value: 1 };
});
...然后使用来自该对象图的数据(仅限单向绑定),就像这样...
<p>The value is: {{myObject.value}}</p>
这工作正常,但如果我随后(在页面渲染完成后)尝试更新 $rootScope 并用新对象替换原始对象,它将被忽略。我最初认为这是因为 AngularJS 保留了对原始对象的引用,即使我已经替换了它。
但是,如果我将消费 HTML 包装在控制器中,我就能够以预期的方式重复更新其范围,并且修改会正确反映在页面中。
myApp.controller('MyController', function ($scope, $timeout) {
$scope.myObject = { value: 3 };
$timeout(function() {
$scope.myObject = { value: 4 };
$timeout(function () {
$scope.myObject = { value: 5 };
}, 1000);
}, 1000);
});
有什么方法可以通过 $rootScope 来完成,还是只能在控制器内部完成?此外,是否有更推荐的模式来实施此类操作?具体来说,我需要一种方法来替换 AngularJS 从 AngularJS 代码外部使用的完整对象图。
提前感谢您的建议,蒂姆
编辑:正如评论中所建议的,我尝试在 $apply 中执行更改,但它没有帮助:
setTimeout(function() {
var injector = angular.injector(["ng", "myApp"]);
var rootScope = injector.get("$rootScope");
rootScope.$apply(function () {
rootScope.myObject = { value: 6 };
});
console.log("rootScope updated");
}, 5000);