AngularJS $位置不改变path
提交表单后,我遇到了更改网页url的问题。
这是我的应用程序的stream程:
- 路由被设置,URL被识别到某个表单页面。
- 页面加载,控制器设置variables,指令被激发。
- 一个特殊的表单指令被激发,使用AJAX执行特殊的表单提交。
- 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);
它应该解决你的问题。