[英]Ember js - how to trigger a controller action when route is activated
每当控制器过渡到“建模者”路线时,我都需要触发控制器动作,但是我似乎无法使其正常工作。 我的router.js文件是:
var Router = Ember.Router.extend({
location: config.locationType,
actions: {
loading: function() {
this.controllerFor('modeller').send('loading');
},
didTransition: function() {
this.controllerFor('modeller').send('didTransition');
}
}
});
Router.map(function() {
this.route('modeller', { path: 'modeller'});
this.route('welcome', { path: '/'});
});
export default Router;
和我的建模器控制器:
export default Ember.Controller.extend({
needs: 'modeller',
loading: function () {
console.log("loading")
},
didTransition: function () {
console.log("didTransition")
},
});
但是我无法获得任何这些操作来登录控制台。 任何指针,不胜感激。
更新:
可能应该提到我正在使用Ember 2.1.0!
因此,我使用的解决方案是setupController-但我还需要将其放入app / routes / modeller.js下的特定建模器路由文件中。 以前,我尝试在app / router.js中执行所有操作,但该操作在那里不起作用。 因此,最终的解决方案是:
# app/routes/modeller.js
import Ember from 'ember';
export default Ember.Route.extend({
setupController: function(controller, model) {
this.controllerFor('modeller').activate();
}
});
和..
# app/controllers/modeller.js
export default Ember.Controller.extend({
needs: 'modeller',
activate: function () {
console.log("activate")
},
});
didTransition
是Route
上的方法,而不是Controller
上的方法,因此未调用该方法。
如果您需要通过路由来实现控制器,那么您想要的钩子就是setupController 。
尝试在Route中使用willTransition。
尝试进行过渡时,无论是通过{{link-to}},transitionTo还是URL更改,都会在当前活动的路由上触发willTransition操作。 这给从最叶子的路由开始的每个活动路由提供了机会,以决定是否应进行过渡。
https://guides.emberjs.com/v2.4.0/routing/preventing-and-retrying-transitions/
模型钩
激活和停用Ember.Route的钩子也会在路由之间的每次转换中调用,您也可以使用这两个方法中的任何一个,并且可以在内部调用控制器操作方法。
deactivate: function() {
this._super();
this.get('controller').send('actionName');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.