javascript - Emberjs 从 mixin 动态注入(inject)

标签 javascript ember.js ember-cli

我有很多使用不同服务的 Controller ,我应该在其中扩展一个 mixin。在 mixin 中,根据 Controller 的调用,我应该注入(inject)差异服务。真的是这样吗?如果是的话,我愿意接受任何建议。 我的 Controller 如下所示:

import FilterController from 'core/addon/filter/filter-controller';
import defaultMixin from 'default-mixin';

export default FilterController.extend(defaultMixin,{
  filter: Ember.inject.service(Pathes.inject.service.leaseFilter),
})

混音:

import Ember from 'ember';
import Views from '../const/views';
import ViewsService from '../static-services/views';

const {
  computed,
} = Ember;

export default Ember.Mixin.create({

  //THIS VIEW SERVICE I SHOULD INJECT BASED ON CONTROLLER
  //VIEW.INJECT.SERVICE.[LEASE,LEASE1,LEASE2,LEASE3]

  viewService: Ember.inject.service(Views.inject.service.Lease),

  defaultViewType: computed(
    'viewService.filteredViewsList',
    function () {
      const viewList = this.get('viewService.filteredViewsList');
      return ViewsService.getDefaultViewFromList(viewList);
    }
  ),
});

最佳答案

最直接的选项是覆盖 Controller 的 extend 中的 viewService

export default FilterController.extend(defaultMixin,{
  viewService: Ember.inject.service('someViewService'),
  filter: Ember.inject.service(Pathes.inject.service.leaseFilter),
})

这样,当您在 mixin 代码中使用它时,对 this.get('viewService') 的任何调用都将解析为您在 ctrl 中覆盖的内容.

关于javascript - Emberjs 从 mixin 动态注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53493636/

相关文章:

ember.js - 如何从给定的数字范围迭代?

javascript - 如何在不重新编译的情况下使用 ASP.NET 捆绑和缩小?

javascript - 如何禁用 "Changes you made may not be saved."对话框(Chrome)?

javascript - getJSON 变量返回未定义

sockets - Ember 和 Socket.io/Websocket

ember.js - ember-cli:如何在 pod 中放置 CSS

javascript - 从 Node.js 中对象的键值中提取值

javascript - Ember.js + Ember 数据 + PostgreSQL

model-view-controller - Ember 多个 Controller 实例

javascript - 从 ember 开始,路线不显示