我正在使用jular-pjax和AngularJS,当我点击一些<a>
标签时,插件会正确捕捉它 - 获取内容 - 并更改网址就好了。
问题是,当我只是将$ location添加到我的控制器时(在控制器内部根本不使用它):
.controller('SomeCtrl', function($scope, $http) { # before
.controller('SomeCtrl', function($scope, $http, $location) { # after
现在当我点击<a>
标签时,PJAX插件会捕获事件 - 获取内容 - 更改网址 - 就好了。
但是在完成2秒之后,我看到了新的URL,但是有些东西正在改变历史记录中的前一页的路径(就像我点击“返回”)。
现在 - 只有网址发生变化,新内容仍然存在......
当我从控制器中取出$ location时,一切正常...... 任何线索?
经过一段时间的努力,我注意到只有当我在分配给<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不会改变...但我需要它,因此新的控制器将被激活用于新的段...... 所以我仍然不明白为什么会这样......
由于我不需要使用$ location服务,所以我最终使用$ window
.controller('SomeCtrl', function($scope, $http, $window) {
.....
$scope.path = $window.location.pathname;
.....
在PJAX完成后,这不会改变我的URL。我很乐意使用这个代码。
当与Angular的路线一起使用时,也许有一些特殊的$ location功能,而我根本就没有使用路线......所以也许$ location表现得很奇怪......不知道。