AngularJS $location 不改变路径

22 浏览
0 Comments

AngularJS $location 不改变路径

我在提交表单后更改页面URL的问题上遇到了困难。

这是我的应用程序流程:

  1. 路由被设置,URL被识别为某个表单页面。
  2. 页面加载,控制器设置变量,指令被触发。
  3. 一个特殊的表单指令被触发,它使用AJAX执行特殊的表单提交。
  4. 在执行AJAX之后(Angular不处理AJAX),回调会被触发,指令调用$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'];

有人可以帮帮我吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

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

例如,使用window.location,您可以分配一个新的页面,就像这样:

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

或者刷新页面,就像这样:

$window.location.reload();

这对我有效。它有点不同于你期望的,但可以实现给定的目标。

0
0 Comments

我几天前遇到了类似的问题。在我的情况下,问题是我改变了一个第三方库的东西(准确地说是jQuery),在这种情况下,即使调用函数并设置变量可以工作,Angular也不总是认识到有变化,因此它永远不会消化。

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

试着在您改变位置并调用replace()后立即使用$scope.$apply()让Angular知道发生了变化。

0