AngularJs更改$ location.path不起作用

时间:2014-12-14 16:23:30

标签: angularjs

我意识到之前已经提出过这个问题。 但是没有一个答案可以解决这个问题。

我对Angular有一定的了解并且产生了很多角度代码,我不是一个完整的初学者。

我已经开始研究MEAN应用程序,因此所有客户端都是Angular。经过两天将我的头撞在墙上,我无法获得一个非常简单的location.path(newPath)来处理控制器$ scope中的函数。

'use strict';

angular.module('core').controller('HeaderController', 
        [   '$scope', 
            '$location',
function($scope, $location) {


    //THIS LINE OF CODE, ON ARRIVAL IN THE CONTROLLER, WORKS
    //- it changes the path no problem.
    //$location.path('/it/vino/chianti/ChiantiClassico');   


    //But trying to set $location.path() DOES NOT WORK IN THE
    //FOLLOWING FUNCTION.
    //This function is called correctly from an ng-click event on a link. 
    //Therefore there should be no need to call apply(). 
    //However I have also tried both $apply and $timeout.

    $scope.changeLanguage = function(lang){

        //Right, let's try setting the path..
        $location.path('/it/vino/chianti/ChiantiClassico');

        //now we log $location.path() in the console and it 
        //gives the correct answer, which is:
        //'/it/vino/chianti/ChiantiClassico',
        //(but the path does not actually change in the browser address bar).
        console.log('$location.path():', $location.path()); //correct!

        //But if I also log the location object and I look inside, 
        //the path hasn't changed there !
        console.log('$location:', $location); //The path is the old one!

        //And the address bar has not changed
    };


}//end function

]);

我已经调试并搜索了寻找另一个$ location对象或其他错误的对象。 - 但是只有一个$ location对象 - 可以在'关闭'堆栈的一部分。

我在这里看不到任何类型的回调错误,我并没有尝试使用尚未定义的对象或类似的东西。

以下是来自视图的调用链接代码的完整性,这里没什么奇怪的,我也试过从按钮调用,该函数被正确调用:

<a href="javascript:;" data-ng-click="changeLanguage('it')">italiano</a>

3 个答案:

答案 0 :(得分:1)

我在同一个问题上挣扎了一段时间。问题是使用新创建的对象的ID更新URL(ID由DB生成并在保存过程中检索)。

对我来说效果很好的只是:

$window.location.assign(newURL);

答案 1 :(得分:0)

可能是你的问题是点击标签做一些导航......

不是真的&#39;回答,但有一些方法可以探索:

  • 尝试删除href中的javascript
  • 替换&#39; a&#39;按&#39;按钮&#39;
  • 纳克单击=&#34; changeLanguage(&#39;它,$事件)&#34;并在changeLanguage功能: event.preventDefault()(或一些stopPropagation)

希望它可以帮助..

答案 2 :(得分:0)

我遇到同样的问题,最后,我使用这段代码: $ window.location =&#39; /#/ path / to / xx&#39; :