AngularJS $ location会将我的网址重置为之前的路径

时间:2015-03-07 14:08:55

标签: javascript jquery angularjs

我正在使用jular-pjax和AngularJS,当我点击一些<a>标签时,插件会正确捕捉它 - 获取内容 - 并更改网址就好了。

问题是,当我只是将$ location添加到我的控制器时(在控制器内部根本不使用它):

.controller('SomeCtrl', function($scope, $http) {   # before
.controller('SomeCtrl', function($scope, $http, $location) {  # after

现在当我点击<a>标签时,PJAX插件会捕获事件 - 获取内容 - 更改网址 - 就好了。 但是在完成2秒之后,我看到了新的URL,但是有些东西正在改变历史记录中的前一页的路径(就像我点击“返回”)。

现在 - 只有网址发生变化,新内容仍然存在......

当我从控制器中取出$ location时,一切正常...... 任何线索?

编辑1

经过一段时间的努力,我注意到只有当我在分配给<body>标签的控制器中使用$ location时才会出现这种情况:

<body ng-controller="SomeCtrl">    # I used $location here
  ... some html ...
  <div ng-controller="SomeSubCtrl"></div>
</body>

由于AngularJS之外的以下代码,确保新段被分配了控制器

var ngRefresh = function() {
    var scope = angular.element("body").scope();
    var compile = angular.element("body").injector().get('$compile');

    compile($("body").contents())(scope);
    scope.$apply();
};

当禁用此功能时 - URL不会改变...但我需要它,因此新的控制器将被激活用于新的段...... 所以我仍然不明白为什么会这样......

编辑2解决方法

由于我不需要使用$ location服务,所以我最终使用$ window

.controller('SomeCtrl', function($scope, $http, $window) {
   .....
   $scope.path = $window.location.pathname;
   .....

在PJAX完成后,这不会改变我的URL。我很乐意使用这个代码。

当与Angular的路线一起使用时,也许有一些特殊的$ location功能,而我根本就没有使用路线......所以也许$ location表现得很奇怪......不知道。

我刚注意到:https://github.com/angular/angular.js/issues/11075

0 个答案:

没有答案