草庐IT

javascript - $routeChangeError 未在 $q.reject 上调用

coder 2024-05-13 原文


我有一个带有 Sails JS 后端的 Angular JS 应用程序,在路由内部(在 app.js 中)我有:

.state('app.detail', {
  url: "/detail",
  views: {
    'menuContent' :{
      templateUrl: "templates/detail.html",
      controller: 'UserUpdateCtrl',
      resolve: {
        auth: ["$q", "userData", function($q, userData) {
          var userInfo = userData.getUserInfo();
          if (userInfo) {
            return $q.when(userInfo);
          } else {
            return $q.reject({ authenticated: false });
          }
        }]
      },
    }
  }
})

(这是继 this guide )

现在在同一个文件上,我有 $routeChangeError:

.run(function($rootScope) {
  $rootScope.$on("$routeChangeError", function(event, current, previous, eventObj) {
    if (eventObj.authenticated === false) {
      $location.path("/login");
    }
  });

在 chrome 上调试时,我看到函数已定义,但未被调用。
我在这里缺少什么?

最佳答案

好吧,假设您使用的是 Angular UI 路由器,我相信您只是错误地翻译了官方的错误处理程序。

来自docs for $state :

Fired when an error occurs during transition. It's important to note that if you have any errors in your resolve functions (javascript errors, non-existent services, etc) they will not throw traditionally. You must listen for this $stateChangeError event to catch ALL errors.

并且这个处理程序的参数不同,尝试这样的事情:

$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
  if (error && !error.authenticated) {
    $location.path("/login");
  }
});

下面是参数的描述,重要的加粗:

  • 事件 – {Object} – 事件对象。
  • toState – {State} – 转换到的状态。
  • toParams – {Object} – 提供给 toState 的参数。
  • fromState – {State} – 当前状态,转换前。
  • fromParams – {Object} – 提供给 fromState 的参数。
  • error – {Error} – 解析错误对象。

关于javascript - $routeChangeError 未在 $q.reject 上调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604931/

有关javascript - $routeChangeError 未在 $q.reject 上调用的更多相关文章

  1. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  2. ruby - 为什么在类上调用 instance_eval() 时定义类方法? - 2

    Foo=Class.newFoo.instance_evaldodefinstance_bar"instance_bar"endendputsFoo.instance_bar#=>"instance_bar"putsFoo.new.instance_bar#=>undefinedmethod‘instance_bar’我的理解是调用instance_eval在对象上应该允许您为该对象定义实例变量或方法。但是在上面的例子中,当你在类Foo上调用它来定义instance_bar方法时,instance_bar变成了一个可以用“Foo.instance_bar”调用的类方法。很明显这段代码没

  3. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  4. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  5. ruby - Array.reject!,它是如何工作的? - 2

    我今天制作了一个非常小的ruby​​脚本,它使用正则表达式来跟踪具有特定名称的文件中的某些内容,并在添加其替换内容之前删除该内容。(否则在迭代过程中会出现问题)。我不太习惯使用ruby​​(自从1-2周前我的假期工作开始后才开始使用它),但我的一个习惯是在迭代时避免接触列表(或大多数其他使用索引的ADT)在它们之上(删除某些内容),与我使用的语言无关。经过一些搜索,我发现了一些可以提供帮助的Array函数。现在,我正在使用Array.reject!并且脚本按照我希望的方式运行,但老实说我无法弄清楚为什么Array.reject!{|行|line=~regex}跳过数组中的对象没有问题。

  6. ruby-on-rails - 在条件路由期间未在 Rails 3 中设置 request.subdomain - 2

    我正在尝试根据RyanBatesscreencastonsubdomains在Rails3中设置子域.但是它对我不起作用。我有以下设置:#routes.rbconstraints(Subdomain)doget'devices'=>'devices#all'end#lib/subdomain.rbclassSubdomaindefself.matches?(request)#binding.pryrequest.subdomain.present?&&request.subdomain=="admin"endend加载urladmin.localhost:3000/devices应该将

  7. ruby - Perl 相当于 Ruby 的 `reject!` ? - 2

    我需要遍历一个数组,并在Perl中有条件地删除元素。我知道slice,但不确定如何在foreach上下文中使用它。在Ruby中,有reject!:foo=[2,3,6,7]foo.reject!{|x|x>3}pfoo#outputs"[2,3]"是否有Perl等价物? 最佳答案 您可以使用Perl的grep这就像一个反向拒绝:它将保留所有满足条件的项目。所以rejectx>3必须变成grepx:@foo=(2,3,6,7);@foo=grep{$_条件不一定是数字比较,但可以是在bool上下文中有效的任何内容,例如匹配正则表达式。

  8. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  9. ruby-on-rails - 在具有 enum_attr 的记录上调用 .all 时参数数量错误 - 2

    MODEL1有一个account_type,所以使用gem'enumerated_attributes',我制作了这样的模型:classMODEL1我不明白的奇怪的事情是,当我像这样查询任意MODEL1的种子时(这是我在ruby​​mine控制台中运行follwing命令时的错误,但在rakedb期间会发生同样的2for1错误:种子):MODEL1.all.sample和MODEL1.all我明白了:DealerLoad(0.3ms)SELECT"MODEL1".*FROM"MODEL1S"ArgumentError:wrongnumberofarguments(2for1)from/

  10. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

随机推荐