我有一个具有以下定义的 mixin。
import Ember from 'ember';
export default Ember.Mixin.create({
loggedinUser: {},
beforeModel() {
if (!this.get('AuthService').isAuthenticated()) {
this.transitionTo('login');
}
this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
} }
});
Run Code Online (Sandbox Code Playgroud)
我将它导入到我的路线中,如下所示
import UnAuthenticatedRouteMixin from '../mixins/un-authenticated-route-mixin';
export default Ember.Route.extend(UnAuthenticatedRouteMixin, {
model(){
this._super(...arguments);
alert("in model");
alert(this.loggedinUser.requestorId);
}
});
Run Code Online (Sandbox Code Playgroud)
我预期的警报顺序是“在模型之前”->“1234”、“模型中”、“1234”。然而,警报的实际顺序是“在模型中”->“未定义”、“在模型中”、“1234”
如何确保在模型钩子之后触发 beforeModel 钩子。
你的问题是beforeModel钩子在钩子之前执行model,但是从getLoggedinUser后面返回的承诺。
然而,路由器将等待承诺解决,所以解决方案很简单:只需返回承诺!
所以替换这个:
this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
Run Code Online (Sandbox Code Playgroud)
有了这个:
return this.get('AuthService').getLoggedinUser()
.then(results => {this.loggedinUser = results;
alert("in before model");
alert(this.loggedinUser.requestorId);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |