$ location.path()在第二次点击后更新?

use*_*667 2 angularjs

[还有第二个问题(见下文) - 在一个控制器中设置的rootScope变量在第二个兄弟控制器中不可见?]

可能重复: angularjs $ location.path仅在第二次点击时更新URL - 问题的原因和答案在我的更基本的情况下似乎不相关

根据angularjs docs(https://docs.angularjs.org/guide/ $ location):

[The $location service]
Maintains synchronization between itself and the browser's URL when the user
...
Clicks on a link in the page.
Run Code Online (Sandbox Code Playgroud)

我知道$ location.path()反映了浏览器中的当前网址,但是当我点击链接更改视图时,表现出奇怪的行为:$ location.path()在第一次点击时没有"改变"链接,此后每次都会更改为上一次点击的链接

要看到这个,请访问:http://jsfiddle.net/7Ah2W/

我尝试了一种解决方法,我必须使用setter重载手动设置$ location.path().

在这样做的过程中,我发现了对angularjs的另一个缺陷.我尝试在rootScope中设置一个变量来反映"当前路径".这个想法是视图会自动检测变量的变化并进行更新.是不是每个范围都继承自rootScope?

这是一个jsfiddle

为什么我的期望是$ rootScope.currentPath,在'NavCtrl'中更改并在'CtrlTwo'中更新未被满足?

我的最终目标是在单击视图中的链接时自动更改导航栏.与https://console.developers.google.com类似,如果单击项目,左侧​​的导航将更改为API和身份验证,设置等.

Mar*_*.io 11

它似乎总是"落后"的原因是你在$location.path()实际的角度页面进程运行之前访问它.奇怪的是,如果你只添加一个$timeout偶数0ms延迟,它将按预期工作.

    $timeout(function () {
        $scope.currentPath = $location.path();
    }, 0);
Run Code Online (Sandbox Code Playgroud)

jsFiddle例子

$ rootScope是全局范围,而不是常规$ scope,它基本上是控制器和视图之间的粘合剂.

例如,我$rootScope.test = 123;在第一个控制器中设置,在第二个控制器中,我警告该变量,并获得结果.jsFiddle $ rootScope示例.小心使用$ rootScope,它会创建全局范围的变量