AngularJS location location使用rout routeProvider时未正确更新
-
20-12-2019 - |
题
我有一个Angular JS应用程序,其中包含 defaultController
它控制应用程序的标题。然后我有一些其他控制器每个视图一个。视图加载在 <main>
.我使用 $routeProvider
用这个代码:
myapp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/login', {
templateUrl: 'templates/login.html',
controller: 'loginController'
}).
when('/dashboard', {
templateUrl: 'templates/dashboard.html',
controller: 'dashboardController'
}).
...
我试图在加载的视图是仪表板时在标题内显示注销按钮,如果加载的视图是登录视图,则将其隐藏。为了做到这一点,我在 defaultController
该 $location
对象和我正确地添加和删除类从注销按钮与 ng-class
.
只有一个问题:$location在我第一次加载页面时给了我正确的路径,但是在我更改视图(由 $routeProvider
)该变量不再更新,所以当我实际打开时 /#/dashboard
,的 $location.url
还在继续 /login
.这里的控制器代码:
controllers.controller('defaultController', ['$scope', 'ipCookie', '$location', function($scope, ipCookie, $location) {
$scope.url = $location.url();
...
我也试过 $window.location.hash
具有相同的结果。
知道吗?
编辑:在接受的答案之后,这是我在 defaultController
为了使其工作
$scope.$on("$locationChangeSuccess", function() {
$scope.url = $location.url();
});
解决方案
加载默认控制器后,该位置可能会在服务中更新。
你可以注射 $location
服务进入范围,并根据它在模板中做出决定(然后它将自动被监视和重新评估),或者您可以侦听 $locationChangeSuccess
事件。
注射时,您可以简单地 $scope.location = $location
然后使用类似的东西 <a ng-hide="location.path() != '/something'">
.
$location
广播 $locationChangeSuccess
在根范围上,因此您应该能够在任何可用的范围上侦听它: $scope.$on( "$locationChangeSuccess", function() { /* do something */ } );