繁体   English   中英

Ember JS-激活路线时如何触发控制器动作

[英]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")
   },
 });

didTransitionRoute上的方法,而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM