AngularJS $位置不改变path

提交表单后,我遇到了更改网页url的问题。

这是我的应用程序的stream程:

  1. 路由被设置,URL被识别到某个表单页面。
  2. 页面加载,控制器设置variables,指令被激发。
  3. 一个特殊的表单指令被激发,使用AJAX执行特殊的表单提交。
  4. AJAX执行后(Angular不关心AJAX),然后callback被触发,指令调用设置位置的$scope.onAfterSubmit函数。

问题是,设置位置后没有任何反应。 我已经尝试设置位置参数/以及…不。 我也试过不提交表格。 没有任何工作

我已经testing,看看代码是否到达onAfterSubmit函数(它)。

我唯一的想法是,函数的作用域被改变了(因为它是从一个指令中调用的),但是如果作用域改变了,又怎么能调用onAfterSubmit呢?

这是我的代码

 var Ctrl = function($scope, $location, $http) { $http.get('/resources/' + $params.id + '/edit.json').success(function(data) { $scope.resource = data; }); $scope.onAfterSubmit = function() { $location.path('/').replace(); }; } Ctrl.$inject = ['$scope','$location','$http']; 

有人可以帮我吗?

前几天我也有类似的问题。 在我的情况下,问题是我改变了事情与第三方库(精确的jQuery),在这种情况下,即使调用函数和设置variables作品Angular并不总是认识到有变化,因此它永远不会消化。

$ apply()用于从angular度框架外部以angular度执行expression式。 (例如从浏览器的DOM事件,setTimeout,XHR或第三方库)。

尝试使用$scope.$apply()后,您已经改变了位置,并调用replace()让Angular知道事情已经改变。

而不是$ location.path(…)来更改或刷新页面我使用的服务$window ,在Angular这个服务被用作window对象的接口, window对象包含一个属性location ,使您能够处理与位置或url相关的操作。

例如,使用window.location您可以分配一个新的页面,如下所示:

 $window.location.assign('/'); 

或刷新它,像这样:

 $window.location.reload(); 

它为我工作。 这与你所期望的有点不同,但是为了给定的目标而工作。

我有同样的问题,但我的电话到$位置是在摘要内已经。 调用$ apply()只是给了一个$ digest过程错误。

这个技巧工作(并确保注入$location到您的控制器):

 $timeout(function(){ $location... },1); 

虽然不知道为什么这是必要的…

我不得不这样embedded我的$location.path()语句,因为我的摘要仍在运行:

  function routeMe(data) { var waitForRender = function () { if ($http.pendingRequests.length > 0) { $timeout(waitForRender); } else { $location.path(data); } }; $timeout(waitForRender); } 

在我的情况下,问题是我的模板configuration中缺less可选参数指示符('?')。

例如:

 .when('/abc/:id?', { templateUrl: 'views/abc.html', controller: 'abcControl' }) $location.path('/abc'); 

如果没有询问特性,路由显然不会改变抑制路由参数。

如果您使用的是Angular-ui / ui-router,请使用$state.go('yourstate')而不是$location 。 它为我做了诡计。

这对我来说(在CoffeeScript中)

  $location.path '/url/path' $scope.$apply() if (!$scope.$$phase) 
 setTimeout(function() { $location.path("/abc"); },0); 

它应该解决你的问题。