>我定义了一个全局$rootScope变量,如下所示:
var app = angular.module("demoApp", []);
app.run(function ($rootScope) {
$rootScope.test = "Global";
});
在我的 html 中,如果我将其作为 {{test}} 访问,它可以工作。
但是在我的控制器中,如果我在控制器中更改此变量的值并使用$location.path(....)更改位置;则此全局变量值保持不变。
function myCtrl($location, $rootScope) {
$rootScope.test = "Changed to Local";
$location.path("New.html");
}
现在在我的新.html如果我访问这个变量 {{test}},它会打印为"全局"而不是"更改为本地"。但是如果我刷新页面,那么它就可以正常工作。
请帮助如何避免此刷新问题。我可以在"app.run....."中使用解析/承诺吗?如果是这样,该怎么做。
这是因为原型继承的工作方式(在这里解释)。这意味着本地范围将获得test
的副本,而不是对它的引用。更改 rootScope 的值不会更改本地范围的副本。
最简单的"修复"是将您希望全局化的 rootScope 属性包装在一个对象中(对象通过引用传递)。
$rootScope.global = { test: "Global" };
然后,您将使用 {{ global.test }}
在视图中引用它。更改$scope.global.test
也会自动更改$rootScope.global.test
,反之亦然。
解决方案是将全局变量定义为"$routeChangeSuccess"。
var app = angular.module("demoApp", []);
app.run(function ($rootScope) {
$rootScope.$on('$routeChangeSuccess', function () {
$rootScope.test = "Global";
});
});
感谢您的详细信息。