我在提交表单后更改页面的URL时遇到问题.
这是我的应用程序的流程:
$scope.onAfterSubmit设置位置的函数.问题是在设置位置后没有任何反应.我也试过设置位置参数/......不.我也试过不提交表格.什么都行不通.
我已经测试过以查看代码是否达到了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'];
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?
F L*_*has 291
几天前我遇到了类似的问题.在我的情况下,问题是我用第三方库(确切地说是jQuery)改变了东西,在这种情况下即使调用函数和设置变量工作,Angular也不总是认识到有变化因此它永远不会消化.
$ apply()用于从角度框架外部以角度执行表达式.(例如,来自浏览器DOM事件,setTimeout,XHR或第三方库).
尝试$scope.$apply()在更改位置后立即使用,并调用replace()让Angular知道事情已经发生了变化.
Pau*_*ira 55
而不是$ location.path(...)更改或刷新我使用该服务的页面$window,在Angular中,此服务用作window对象的接口,该window对象包含一个属性location,使您可以处理与该位置相关的操作或URL的东西.
例如,window.location您可以分配新页面,如下所示:
$window.location.assign('/');
Run Code Online (Sandbox Code Playgroud)
或刷新它,像这样:
$window.location.reload();
Run Code Online (Sandbox Code Playgroud)
它对我有用.它与您期望的有点不同,但适用于给定的目标.
Ros*_*s R 28
我遇到了同样的问题,但是我在$摘要中对$ location的调用已经很好了.调用$ apply()只是在进程错误中给出了$ digest.
这个技巧有效(并且一定要注入$location你的控制器):
$timeout(function(){
$location...
},1);
Run Code Online (Sandbox Code Playgroud)
虽然不知道为什么这是必要的......
我不得不$location.path()像这样嵌入我的声明,因为我的摘要仍在运行:
function routeMe(data) {
var waitForRender = function () {
if ($http.pendingRequests.length > 0) {
$timeout(waitForRender);
} else {
$location.path(data);
}
};
$timeout(waitForRender);
}
Run Code Online (Sandbox Code Playgroud)