gpt4 book ai didi

ember.js - 如何让两个 ember-cli 服务交叉通信?

转载 作者:行者123 更新时间:2023-12-01 00:58:27 25 4
gpt4 key购买 nike

使用 ember-cli 版本 0.0.42

运行这些命令

ember new myApp
cd myApp
ember generate service serviceOne
ember generate service serviceTwo
ember generate controller application

进行这些更新

Controller /application.js
import Ember from 'ember';

export default Ember.Controller.extend({
init: function() {
var a = this.get('serviceOneService.testFunction');
}
});

初始化程序/service-one-service.js
export default {
name: 'service-one-service',
initialize: function(container, app) {
app.inject('route', 'serviceOneService', 'service:service-one');
app.inject('controller', 'serviceOneService', 'service:service-one');
}
};

服务/service-one.js
import Ember from 'ember';

export default Ember.Object.extend({
testFunction: function(){
//How would I make a call to serviceTwo.testFunction here instead of returning 123
return "123"
}
});

服务/服务-two.js
import Ember from 'ember';

export default Ember.Object.extend({
testFunction: function(){
return "Test function from service 2"
}
});

我的问题是如何将 serviceOne 注入(inject)服务二并将 serviceTwo 注入(inject)服务一。一我这样做我如何从服务一访问服务二。在调用内部时,我知道如何将服务直接注入(inject)所有 Controller ,但是当我尝试注入(inject) testFunction 内部的另一个对象(服务)时,“this”指的是窗口而不是 ember 对象。

我的第一个想法是将每个服务注入(inject)到整个服务命名空间中,但我收到了这条消息:
Uncaught Error: Cannot inject a `service:service-one` on other service(s). Register the `service:service-one` as a different type and perform the typeInjection.   

最佳答案

您可以通过定义初始化程序并设置设置 after 将一个服务注入(inject)另一个服务。属性类似于 after: ['service-one', 'service-two'] ,这将导致它在这两个服务都注册后运行。

初始化程序看起来像......

Ember.Application.initializer({
after: ['service one', 'service two'],
name: 'service injections',
initialize: function(container, application){
application.inject('service:service-one', 'serviceTwoService', 'service:service-two');
}
});

不幸的是,如果您尝试注入(inject) service:service-one进入 service:service-two您将收到一条错误消息,指出 Maximum call stack size exceeded发生这种情况是因为容器在尝试查找所有需要的注入(inject)时进入循环。

你可以在这里看到一个工作箱: http://emberjs.jsbin.com/fitaka/1/edit

关于ember.js - 如何让两个 ember-cli 服务交叉通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25628608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com