角度 JS - 全局变量刷新问题



>我定义了一个全局$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"; 
    });
});

感谢您的详细信息。

最新更新