Javascript AngularJS的数据流问题
我在指令中有一个函数,用于进行查询(并根据控制台获取结果)。问题是,我似乎无法将这些结果存储到工厂,并将其传递给控制器 这是指令:Javascript AngularJS的数据流问题,javascript,angularjs,factory,Javascript,Angularjs,Factory,我在指令中有一个函数,用于进行查询(并根据控制台获取结果)。问题是,我似乎无法将这些结果存储到工厂,并将其传递给控制器 这是指令: scope.getVersions = function(release) { if (angular.isUndefined(release)) return; musicInfoService.getReleaseVersions(release.id) .success(function(data) {
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);
}
但是items和$scope.versions都返回一个空数组。我遗漏了什么吗?您真的应该使用备份字段来存储数据,并使用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);
}
人们对这里正在进行的角度工厂有一种误解。您正在尝试设置dataService=,这将永远不会起作用 正如Mohammad提到的,您需要在工厂中的返回值之外设置一个变量,并且返回值基本上是一个对象,其函数允许您操作常量。因此,您需要一个getter“getItems()”来获取项目,一个setter“addItem(item)”来将项目添加到项目数组中 所以你从来没有直接将你的“项目”注入控制器,你注入了一堆可以获取或操作你的“项目”的函数
嗨,Mohammad,我已经尝试了你的代码,但是回来了ReferenceError:数据服务没有定义。1秒钟,让我做一个简单的解释,我会给你我的,差不多finished@EricMitjans这是因为您没有将
dataService
注入指令构造函数,请执行以下操作:app.directive('release',['musicInfoService','dataService',function(musicInfoService,dataService){
我再也看不到该plunk中未定义的错误,您能粘贴控制台中得到的确切错误吗?
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);
});
}