我在AngularJS应用程序中使用Restangular,但是CRUD操作遇到一些问题。
我正在尝试打补丁并从列表中删除项目。无论我做什么,这些错误都会不断出现:
TypeError:item.remove不是Scope。$ scope.deleteItem的函数
TypeError:item.patch不是Scope。$ scope.requestItems.Restangular.all.customGET.then。$ scope.patchTitleChange的函数
这是我的代码块:
appModule
.controller('AppController', ['$scope', 'Restangular', '$rootScope', '$state', '$document',
function ($scope, Restangular, $rootScope, $state, $document) {
$scope.items = [];
$scope.requestItems = function (search_input, page, status) {
var request_params = {
"search": search_input,
"page": page,
"filter_status": status
};
Restangular.all('/myUrl/3/').customGET("items", request_params).then(
function (data) {
if (request_params.page == 1)
$scope.items = data.results;
else
$scope.items = $scope.items.concat(data.results);
$scope.metadata = {
"count": data.count,
"next": data.next,
"previous": data.previous
};
$scope.patchTitleChange = function (index) {
console.log($scope.items[index].name);
$scope.items[index].patch({name: $scope.items[index].name});
};
$scope.patchDescriptionChange = function (index) {
$scope.items[index].patch({description: $scope.items[index].description});
};
}
)
};
$scope.deleteItem = function (item) {
item.remove().then(function () {
var index = $scope.items.indexOf(item);
if (index > -1)
$scope.items.splice(index, 1);
})
};
我查看了与我的问题有关的其他问题,并尝试了它们的答案和解决方案,但似乎没有任何效果。
最佳答案
分配给您的items数组的元素不是重新矩形化的元素。您正在分配data.results,它们是普通的JSON对象。为了进行补丁,删除等...它们必须通过Restangular.restangularize传递或直接从get / getList请求中接收:
//Collection
$scope.items = Restangular.restangularizeCollection(null, data.results, 'myUrl/3/items');
//Individual Items
angular.forEach(data.results, function (item) {
$scope.items.push(Restangular.restangularizeElement(null, item, 'myUrl/3/items');
});
在对集合进行重新组合时,单个项目也将被重新组合,我只提到对结果集进行迭代,因为看起来您是在追加上述多个调用的结果。
参见:Restangular Methods
关于javascript - 列表中的矩形CRUD元素方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32441995/