我已经设置了两个服务,如下面的初始化程序所示:
/* Service Initaializers */
var Initaializer = {
name: 'Services',
initialize: function(Container, App) {
/* Inject Session Service In To All Routes And Controllers */
App.inject('route', 'Session', 'service:session');
App.inject('controller', 'Session', 'service:session');
/* Inject Debug Service In To All Routes And Controllers */
App.inject('route', 'Debug', 'service:debug');
App.inject('controller', 'Debug', 'service:debug');
}
};
/* Export */
export default Initaializer;
我可以从路由/控制器用户this.Session
和this.Debug
访问会话服务和调试会话。
我遇到的麻烦是从会话服务访问Debug服务中的任何函数。
应用/服务/ debug.js
/* Debug Service */
var Service = Ember.Object.extend({
/* Start Debug */
init: function() {
console.log('Debug Started!'); // This does appear in the console.
},
logSomething: function(i) {
console.log(i); // This does work from all routes/controllers.
}
});
/* Export */
export default Service;
应用/服务/ sessions.js
/* Session Service */
var Service = Ember.Object.extend({
/* Start Session */
init: function() {
console.log('Session Started!'); // This does appear in the console.
this.Debug.logSomething('Test'); // This gives an error.
},
sayHi: function() {
console.log('Hello From The Session Service'); // I does work from all routes/controllers.
}
});
/* Export */
export default Service;
给出控制台错误的行是this.Debug.logSomething('Test');
。
错误是:Uncaught TypeError: Cannot read property 'logSomething' of undefined
要从服务中访问其他服务中的功能,我需要做什么?
答案 0 :(得分:3)
您只将这些对象注入路径和控制器。如果你想让它们可以访问,你实际上需要互相注入
好的,所以我相信这是可能的。您只需要将Debug对象注入到会话中。
你可以这样做:
首先注册您的工厂:
App.register('utils:debug', App.Debug);
App.register('service:session', App.Session);
然后将调试注入会话:
App.inject('service:session', 'debug', 'utils:debug');
或者您可以将调试注入所有服务:
App.inject('service', 'debug', 'utils:debug');