当前位置: 首页 > 面试题库 >

AngularJS $ location不更改路径

邢焱
2023-03-14
问题内容

提交表单后,更改页面的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'];

有人可以帮我吗?


问题答案:

几天前,我遇到了类似的问题。在我的情况下,问题是我使用第三方库(准确地说是jQuery)更改了内容,在这种情况下,即使调用函数和设置变量有效,Angular也不总是知道有更改,因此从不进行摘要。

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

$scope.$apply()更改位置并致电replace()Angular 后,请立即尝试使用,以告知发生了变化。



 类似资料:
  • 问题内容: 如何在AngularJs中取消路线更改事件? 我当前的代码是 即使验证失败,Angular也会提取下一个模板和关联的数据,然后立即切换回上一个视图/路线。如果验证失败,我不希望angular提取下一个模板和数据,理想情况下应该没有window.history.back()。我什至尝试过event.preventDefault()但没有用。 问题答案: 代替使用 这是angularjs专

  • 问题内容: 是否可以在不保存更改的情况下侦听路由更改和onwindowunload来确认页面离开? 用例: 用户点击返回 用户在浏览器中按下后退按钮 用户类型使用其他URL 如果用户单击“取消”,则停止页面/路线更改。 我看到了几个不同的示例,但没有一个工作得很正确。 问题答案: 演示:http://plnkr.co/edit/Aq8uYg 在演示中,如果您更改输入的值,则在尝试返回时会注意到您。

  • 问题内容: Whenver我有一个角表达式作为值的,它不会工作: 数字值将转换为字符串,并且复选框根本无法使用。 http://jsfiddle.net/punund/NRRj7/3/ 问题答案: 您不能动态更改输入的类型,因为IE不允许这样做,并且AngularJS需要跨浏览器兼容。因此,即使您可能会看到更改后的类型显示在源代码中,AngularJS也不会接受它- 类型仅被评估一次,并且无法更改

  • 问题内容: 我可以在控制器中看到该事件,但看不到如何告诉Angular留下。我需要弹出类似“您要保存,删除还是取消?”这样的信息。如果用户选择“取消”,则停留在当前“页面”上。我看不到任何允许侦听器取消路由更改的事件。 问题答案: 您正在听错事件,我做了一些谷歌搜索,但在文档中找不到任何内容。快速测试: 在全局控制器中,阻止了位置更改。

  • 有没有可能--在中也这样做? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路由是,在保存时显示,并且要将路由(23-是新项的id存储在数据库中)

  • 问题内容: 当前,我们的项目正在使用default ,而我正在使用此“ hack”来进行更改,而无需重新加载页面: 和在 我想到的替换用筑巢路线,但无法找到这。 有可能吗? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路线是在SAVE 之后显示的,我想将路线更改为(23-是存储在db中的新项目的id) 问题答案: 只需使用即可代替 。内部调用,但会自动将选项设置为。您可以呼叫和设置。例如