Angularjs 获取给定ID的对象的角度grep或filter
我的数据库中有一个类别对象的json数组。(我将其存储在控制器的vm.data中,该控制器绑定到角度中继器。) 现在我需要返回并使用每个子类别中的“类别”字段获取每个类别中的子类别 以下是我的通用数据获取程序:Angularjs 获取给定ID的对象的角度grep或filter,angularjs,json,filter,Angularjs,Json,Filter,我的数据库中有一个类别对象的json数组。(我将其存储在控制器的vm.data中,该控制器绑定到角度中继器。) 现在我需要返回并使用每个子类别中的“类别”字段获取每个类别中的子类别 以下是我的通用数据获取程序: function getData(params, callback) { $http({ method: 'GET', url: 'database.php', params: params }).then(function
function getData(params, callback) {
$http({
method: 'GET',
url: 'database.php',
params: params
}).then(function successCallback(response) {
callback(response.data);
});
}
因此,要获得我的类别,我需要:
function getCats() {
var params = {};
params.table = "Categories";
getData(params,buildCats);
};
这让我想起
function buildCats(data) {
vm.data = data;
$.each(vm.data,function(index,value){
getSubCat(value.uID);
});
};
然后,它一个接一个地获得子类别:
function getSubCat(categoryId) {
var params = {};
params.table = "SubCats";
params.where_field = "Category";
params.where_value = categoryId;
getData(params, buildSubCat);
};
这又回到了这一点:(我不再有类别Id,所以我必须在我的子类别数据中查找它)
就在这里,我遇到了麻烦
我需要在vm.data中获得唯一的类别对象-实际对象,而不是它的副本-,其uID等于我当前正在处理的子类别的ID,然后将当前子类别对象添加到其中。上述方法不起作用。至少,我从未在vm.data中看到类别中的子类别
我试着把它拆开,就像这样:
var foo = $filter('filter')(vm.data, function(el){
el.uID==categoryId;
}, true);
foo.SubCats = data;
<div class="category" ng-repeat="cat in vm.data">
<h2>{{cat.Name}}</h2>
<div class="subcategory" ng-repeat="SubCat in cat.SubCats">
<h3>{{SubCat.Name}}</h3>
</div>
</div>
但是foo是Category对象的新实例,而不是vm.data中的引用,因此我的添加不会影响vm.data。
我想我可以尝试用foo替换vm.data[n],但这似乎是一个糟糕的做法
如何异步检索类别和子类别并将它们组合起来
我脑子里有一种感觉告诉我应该将实际的Category对象传递到getData中,因此它可以直接在回调中使用,但我不确定这是否有意义。好的,我想出了一个解决方案,只是不确定它是否是最好的 我接受第三个参数将目标对象传递到getData函数:
function getData(params, target, callback) {
$http({
method: 'GET',
url: 'index.php',
params: params
}).then(function successCallback(response) {
callback(target, response.data);
});
}
在我的getCats中,我将vm.data作为目标参数传递(尽管不需要,稍后就会看到)
现在,我应该能够做到这一点:
function buildCats(target, data) {
target = data;
$.each(target,function(index, catObj){
getSubCat(catObj);
});
};
但由于某些原因,它不起作用。目标似乎已丢失对vm.data的引用。如果你能找出哪里出了问题,就可以获得额外的积分
但这没关系-我不需要目标-我可以将结果直接分配给vm
function buildCats(target, data) {
vm.data = data;
$.each(vm.data,function(index, catObj){
getSubCat(catObj);
});
};
现在,我可以将实际的类别对象本身传递给getSubCat调用:
function getSubCat(categoryObject) {
var params = {};
params.table = "SubCats";
params.where_field = "Category";
params.where_value = categoryObject.uID;
params.sort_field = "Order";
params.sort_dir = "ASC";
getData(params, categoryObject, buildSubCat);
};
这意味着我现在在回调中有了实际的对象:
function buildSubCat(categoryObject, data) {
categoryObject.SubCats = data;
};
我的HTML如下所示:
var foo = $filter('filter')(vm.data, function(el){
el.uID==categoryId;
}, true);
foo.SubCats = data;
<div class="category" ng-repeat="cat in vm.data">
<h2>{{cat.Name}}</h2>
<div class="subcategory" ng-repeat="SubCat in cat.SubCats">
<h3>{{SubCat.Name}}</h3>
</div>
</div>
{{cat.Name}
{{SubCat.Name}