我的问题与其他类似名称的问题有些不同。我正在尝试将一个函数转换为一个工厂,以便在控制器之间提供数据,但与其他类似的工厂不同,这不起作用。
我有其他工作工厂在相同的services.js工作正常。在控制台中查看它们时,它们都会记录相同的数据,所以我想知道return
是否有问题没有正确返回?
仅在控制器中有效:
控制器
getProgrammeData = function(activeProgrammeID) {
var programmeData = [];
var GetProgrammeData = Parse.Object.extend("Programme");
var query = new Parse.Query(GetProgrammeData);
query.equalTo("objectId", activeProgrammeID);
query.first({
success: function(object) {
$scope.programmes = {
programmeTitle : object.get('programmeTitle'),
id : object.id,
exerciseData : object.get('exerciseData')
};
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
但这不......
services.js
.factory('parseQueryFactory', function($http) {
return {
getProgrammeData:function(activeProgrammeID) {
var programmeData = [];
var programmes = {};
var GetProgrammeData = Parse.Object.extend("Programme");
var query = new Parse.Query(GetProgrammeData);
query.equalTo("objectId", activeProgrammeID);
query.first({
success: function(object) {
programmes = {
programmeTitle : object.get('programmeTitle'),
id : object.id,
exerciseData : object.get('exerciseData')
};
console.log(programmes)
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
})
return programmes
}
}
});
controllers.js
$scope.programmes = parseQueryFactory.getProgrammeData(activeProgrammeID);
其次,我如何利用这些结果的缓存?
答案 0 :(得分:2)
主要问题是您首先返回一个空对象,并且在查询的回调中,您正在创建一个新对象并且丢失该对象的引用。试试这个:
.factory('parseQueryFactory', function($http) {
var programmes = {}
return {
getProgrammeData:function(activeProgrammeID) {
var programmeData = [];
var GetProgrammeData = Parse.Object.extend("Programme");
var query = new Parse.Query(GetProgrammeData);
query.equalTo("objectId", activeProgrammeID);
query.first({
success: function(object) {
programmes.programmeTitle =object.get('programmeTitle');
programmes.id = object.id;
programmes.exerciseData = object.get('exerciseData');
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
})
return programmes;
}
}
});
答案 1 :(得分:0)
添加@JesusQuintana的答案。
我倾向于布置这样的工厂:
.factory('parseQueryFactory', ['$http', parseQueryFactory])
function parseQueryFactory($http) {
var service = {
getProgrammeData: getProgrammeData
};
var serviceBase = '/api/someController';
return service;
function getProgrammeData(activeProgrammeID) {
return $http.get(serviceBase, { params: { activeProgrammeID: activeProgrammeID }).then(function (data) {
return data.data;
}).catch(function (message) { console.error(message); });
}
}
这使我更容易,当a)我只是想知道这项服务可以做什么,b)主要功能的哪些部分。例如。返回服务之前的一切都是原始服务,并且将是单身人士。之后的一切都是我的服务所依赖的实现。