AngularJS $location not updated properly when using $routeProvider -
i have angular js application defaultcontroller controls header of app. have other controllers 1 each view. views loaded in <main>. load views using $routeprovider code:
myapp.config(['$routeprovider', function($routeprovider) { $routeprovider. when('/login', { templateurl: 'templates/login.html', controller: 'logincontroller' }). when('/dashboard', { templateurl: 'templates/dashboard.html', controller: 'dashboardcontroller' }). ... i trying display logout button inside header when loaded view dashboard , hide if loaded view login view. in order have on defaultcontroller $location object , add , remove classes logout button ng-class.
there 1 problem: $location gives me correct path first time load page, after change view (changed $routeprovider) variable not updated anymore, when on /#/dashboard , $location.url still on /login. here controller code:
controllers.controller('defaultcontroller', ['$scope', 'ipcookie', '$location', function($scope, ipcookie, $location) { $scope.url = $location.url(); ... i tried $window.location.hash same result.
any idea?
edit: after accepted answer ve added on defaultcontroller in order make work
$scope.$on("$locationchangesuccess", function() { $scope.url = $location.url(); });
the location updated in service after default controller loaded.
you can either inject $location service scope , make decisions in template based on (then automatically watched , re-evaluated) or listen $locationchangesuccess event.
when injecting, can $scope.location = $location , use <a ng-hide="location.path() != '/something'">.
$location broadcasts $locationchangesuccess on root scope, should able listen on whichever scope have available: $scope.$on( "$locationchangesuccess", function() { /* */ } );
Comments
Post a Comment