我需要一些帮助来了解以下角度服务代码中的错误。角度服务问题
编辑: 我有不同的js文件数控制器使用CRUD API像
$http.get('/api/sites/' + service.siteID)
或只是需要变量指令像
templateUrl: '../../' + service.template + ' + '.html'
所以我创造之间共享这些变量服务所有的js文件,而不是在每个文件中进行api调用。
这里是服务
app.service('SharedData', function($http) {
$http.get('config.json')
.success (function(data) {
var siteID = data._id;
console.log(siteID); // return 553e2d15f91e4bd75d000008
$http.get('/api/sites/' + siteID)
.success(function(site) {
var template = site.template;
console.log(template); // return myTemplate
})
.error(function(data) {
console.log('Error: ' + data);
})
})
.error(function(data) {
console.log('Error: ' + data);
})
service = {
siteID : siteID, // return undefined instead of 553e2d15f91e4bd75d000008
template : template // return undefined instead of myTemplate
};
return service;
})
我只想做一个精确的。如果我写我的服务类似下面,它工作得很好,我的意思是值在所有控制器和指令以及通过
app.service('SharedData', function() {
service = {
siteID : '553e2d15f91e4bd75d000008',
pageID : '553e2d15f91e4bd75d000009',
template : 'template1',
layout : 'home'
};
return service;
})
非常感谢
编辑
我修改了服务为遵循
app.factory('SharedData', function($http) {
service = {};
$http.get('config.json')
.success (function(data) {
service.siteId = data._id;
//console.log(service.siteId);
$http.get('/api/sites/' + service.siteId)
.success(function(site) {
service.template = site.template;
//console.log(service.template);
})
})
service.pageID = '553e2d15f91e4bd75d000009';
service.layout = 'home'
return service
})
在控制器的console.log(服务)与所有值返回一个对象:
layout: "home"
pageID: "553e2d15f91e4bd75d000009"
siteId: "553e2d15f91e4bd75d000008"
template: "template1"
console.log('Layout is ' + service.layout); // return home
console.log('PageID is ' + service.pageID); // return 553e2d15f91e4bd75d000009
但
console.log('siteID is ' + service.siteId); // return undefined !!!!!
console.log('template is ' + service.template); // return undefined !!!!!
不明白,请帮助
我认为这是一个有点乱做这样...您需要3种声明,其中两种仅作为最终服务对象的传递。 – tpie
是的,我同意。虽然OP的问题基本上不了解对象的范围。 –