Я пытаюсь выяснить, как обновить массив в объекте javascript, используя API. В качестве примера я могу получить полную конечную точку /api/posts/: id и получить следующие результаты:
{"_id":"56521356177af21100960105",
"user":"564bbd2da851f0aaeb7746c5",
"description":"'Taking You Higher' Pt. 3 Support here... http://bit.ly/YJBeIg So a year after 'Taking You Higher' Rameses B and I decided to put out another summery progres...",
"title":"'Taking You Higher Pt. 2' (Progressive House Mix) - YouTube","comment":"This is a great mix.","url":"https://www.youtube.com/watch?v=heJBwBUStXU","__v":0,
"created":"2015-11-22T19:11:18.760Z",
"group":["564fddfbf5d334fc0f6b4093"]}
Я хочу сосредоточиться на массиве "group" внутри объекта. Я ищу способ обновить массив, добавив и удалив элементы, используя AngularJs. Насколько я могу судить, мне скорее всего придется использовать $ resource вместо $ http. Однако я не знаю, как это должно быть написано.
Вот что я до сих пор в моем контроллере:
myApp.factory('groupsInPost', function($resource) {
return $resource('/api/posts/:id', { id: '@_id' }, {
update: {
method: 'PUT' // this method issues a PUT request
}
});
});
,
myApp.controller('AppCtrl', ['$scope', '$http', '$timeout', '$q', '$log', '$filter', 'groupsInPost',
function($scope, $http, $timeout, $q, $log, $filter, groupsInPost ) {
...
$scope.updateGroup = function(post_id) {
var favorite = $scope.favorite;
$scope.groups = groupsInPost.get({ id: post_id }, function() {
// $scope.groups is fetched from server and is an instance of groupsInPost
console.log($scope.groups.data)
//$scope.groups.$update(function() {
//updated in the backend
});
// $http.put('/api/posts/' + post_id, groups.push(group_id)).success(function(response) {
// refreshPost();
// });
};
...
});
Моя текущая проблема, которую вы можете сразу ожидать, заключается в том, что мой API не отправляет массив, как ожидает $ resource. Я не уверен, куда идти отсюда. Если у вас есть понимание, это будет очень полезно.
Спасибо,
Я немного смутился из-за того, почему вы вызываете $scope.groups.data
. Являются ли data
частью вашего ответа API на GET
?
Также в соответствии с опубликованным кодом вы получаете список групп во время вашего вызова обновления. Поскольку $resource
связанный с posts
не должен быть сделан раньше? В то время, когда вы загружаете сообщения, кажется более разумным.
На вашей прокомментированной строке вы group_id
в список групп. От куда это?
Предполагая, что вы хотите сохранить этот поток, в настоящее время мое предложение будет примерно таким:
var group_id = 1;
$scope.post = groupsInPost.get({ id: post_id }, function() {
$scope.post.group.push(group_id);
$scope.post.$update(function() {
// updated in the backend
});
});
Пожалуйста, дайте мне знать, если я пропустил что-то по этому вопросу, поэтому я могу обновить свой ответ соответственно
var i = $scope.post.group.indexOf(group_id);
А затем удалите его:if (i !== -1) { $scope.post.group.splice(i, 1); }