【问题标题】:Ember js - how to trigger a controller action when route is activatedEmber js - 激活路由时如何触发控制器操作
【发布时间】:2016-06-14 22:36:31
【问题描述】:

每次将控制器转换到(“建模器”路线)时,我都需要触发控制器操作,但我似乎无法让它工作。我的 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")
   },
 });

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    didTransitionRoute 上的方法,而不是Controller 上的方法,这就是为什么没有调用该方法的原因。

    如果你需要从路由中影响控制器,你想要的钩子是setupController

    最佳做法是使用components,这将使您能够使用组件lifecycle hooks

    【讨论】:

      【解决方案2】:

      尝试在 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');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多