Ember - 将变量从路由传递到控制器

Ember - passing variable from route to controller

我在使用 EmberJS 时遇到了很大的麻烦。我正在使用 Ember.RSVP.hash 加载多个模型,如下所示:

路线:

 model() {
    const self = this;
    return Ember.RSVP.hash({
      test: 'sample text'
    }).then((hash) => {
      return Ember.RSVP.hash({
        test: hash.test,
      });
    }, self);
  }

然后在我的控制器中,我试图像这样访问这个模型参数:

控制器:

export default Controller.extend({
  init() {
   console.log(this.get('model.test');
  }

我的控制台应该记录 'sample text' 但不幸的是我得到 'undefined'

是不是我用的init方法引起的?我想注意到我需要在加载此路由页面后立即访问此参数。

在 route.js 中使用 setupController hook 它会在 model hook 之后调用,所以你会在参数中得到 controllermodel 实例,所以你可以得到访问模型属性并根据 model.

设置控制器属性
setupController(controller,model)
{
 controller.setProperites(model);
  //you can do anything with controller and model instance
}

init 方法将在您 model 挂钩完成执行之前调用,因此您无法像您那样访问它 this.get('model.test')

在您能够访问模型属性之前,父控制器对象可能需要进行一些设置。请尝试以下操作:

控制器

export default Controller.extend({
    init() {
        // This line calls the Controller constructor...
        this._super(...arguments);
        console.log(this.get('model.test');
    }
});

The Ember docs 可能会为您提供所需的其他信息。

此外,控制器最有可能在您的模型承诺解决之前构建。在这种情况下,您将不得不使用 computed properties ,当您尝试访问计算的 属性.

时,只要所依赖的属性值发生更改,它就会更新