1

我正在定义一个全局 $rootScope 变量,如下所示:

var app = angular.module("demoApp", []);
app.run(function ($rootScope) {
    $rootScope.test = "Global"; 
});

在我的 html 中,如果我以 {{t​​est}} 的身份访问它,它就可以工作。

但是在我的控制器中,如果我在控制器中更改此变量的值并使用 $location.path(....); 那么这个全局变量值保持不变。

function myCtrl($location, $rootScope) {
    $rootScope.test = "Changed to Local"; 
    $location.path("New.html");
}

现在在我的 New.html 中,如果我访问这个变量 {{test}},它会打印为“全局”而不是“更改为本地”。但是如果我刷新页面,那么它工作正常。

请帮助如何避免此刷新问题。我可以在“app.run .....”中使用解决/承诺吗?如果有怎么办。

4

2 回答 2

3

这是因为原型继承的工作方式(解释here)。这意味着您的本地范围将获得一份副本test而不是对其的引用。更改 rootScope 的值不会更改本地范围的副本。

最简单的“修复”是将您想要成为全局的 rootScope 属性包装在一个对象中(对象通过引用传递)。

$rootScope.global = { test: "Global" };

然后,您将使用{{ global.test }}. 更改$scope.global.test也会自动更改$rootScope.global.test,反之亦然。

于 2013-09-10T15:53:19.767 回答
0

解决方案是将全局变量定义为“$routeChangeSuccess”。

var app = angular.module("demoApp", []);
app.run(function ($rootScope) {
    $rootScope.$on('$routeChangeSuccess', function () {
        $rootScope.test = "Global"; 
    });
});

感谢您提供详细信息。

于 2013-09-11T01:14:13.327 回答