我在一个指令中有一个函数来进行查询(并根据控制台获取结果)。问题是我似乎无法将这些结果存储到工厂中,并将它们传递给控制器。
这是指令:
scope.getVersions = function(release) {
if (angular.isUndefined(release)) return;
musicInfoService.getReleaseVersions(release.id)
.success(function(data) {
dataService = data.versions;
console.log(dataService);
});
};
控制台显示dataService包含一个包含结果的数组。 然后,我尝试将其存储到工厂中:
app.factory('dataService', [function(){
return { items: [] };
}]);
我在控制器中调用它:
function VersionController($scope, dataService) {
$scope.versions = dataService.items;
console.log($scope.versions);
}
但是两个项目和$ scope.versions都返回一个空数组。我错过了什么吗?
答案 0 :(得分:1)
您应该使用支持字段来存储该数据,并分别使用setter和geter函数进行写入和读取:
app.factory('dataService', [function(){
var _items={};
return {
setItems:function(value){
_items=value;
},
getItems:function(){
return _items;
}
};
}]);
用于设置数据:
musicInfoService.getReleaseVersions(release.id)
.success(function(data) {
dataService.setItems(data.versions);
console.log(dataService);
});
并阅读:
function VersionController($scope, dataService) {
$scope.versions = dataService.getItems();
console.log($scope.versions);
}
答案 1 :(得分:1)
对这里有角度的工厂存在误解。您正在尝试设置dataService =,这将无法正常工作。
正如Mohammad所提到的,你需要在工厂中设置一个超出你的返回值的变量集,返回值基本上是一个具有允许你操作常量的函数的对象。所以你需要的是一个getter" getItems()"获取项目,以及setter" addItem(item)"用于将项目添加到项目数组中。
所以你永远不会直接注射你的"物品"进入一个控制器,你会注入一堆可以获取或操纵你的物品的功能。
scope.getVersions = function(release) {
if (angular.isUndefined(release)) return;
musicInfoService.getReleaseVersions(release.id)
.success(function(data) {
dataService.addItem(data.versions);
console.log(dataService.getItems());
});
};
app.factory('dataService', [function(){
var items = [];
return {
addItem: function(item) {
items.push(item);
},
getItems: function() {
return items;
}
};
}]);
function VersionController($scope, dataService) {
$scope.$watch(dataService.getItems, function(items) {
$scope.versions = items;
console.log($scope.versions);
});
}