在 ember-simple-auth 身份验证后触发到 'loading' 路由的转换

Trigger transition to 'loading' route after ember-simple-auth authentication

我想向登录我的应用程序的用户显示 "loading..." 动画。

Ember 自动转换到 'loading' 路线(如果有的话)如果模型 returns 一个承诺,所以它有机会显示 'loading' 模板直到服务器响应。

现在,我有一个登录表单,其中提交会触发我的控制器(在 LoginControllerMixin 中定义)中的 'authenticate' 操作。 这似乎不被 ember 识别为承诺,因此应用程序不会转换到 'loading' 路由。

也许使用简单身份验证会话状态可以解决这个问题,但我想不出来

任何帮助将不胜感激

这并不是说它不是一个承诺,而是它不是过渡的一部分。如果你想修改身份验证 mixin,你可以让它手动转换到加载路由,然后开始承诺,然后转换到目标 post 身份验证。老实说,如果这值得,我会感到惊讶,除非你的后端验证真的很慢。

您可以将身份验证逻辑更改为如下内容:

this.transitionTo('loading').then(function(){      
  authenticateLogicCall().then(function(){
    this.transitionTo('authenticatedResource');
  });
});

我认为加载路由只有在存在转换并且框架正在等待目标路由的 model 钩子返回的承诺来解决时才能很好地工作。 Ember Simple Auth 的 LoginControllerMixin 的 authenticate 操作并非如此。要显示加载消息,您可以简单地覆盖 authentication 操作:

export default Ember.Controller.extend(LoginControllerMixin, { actions: { authenticate: function() { var _this = this; this.set('loading', true); this._super().then(function() { _this.set('loading', false); }, function() { _this.set('loading', false); }); } } });