Angular.js удалить ресурс с параметром

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

25
задан Zaheer Ahmed 24 April 2013 в 07:54
поделиться

4 ответа

params является объектом параметров запроса по умолчанию в ваших действиях. Если вам нужны параметры URL, вы должны указать их во втором параметре, например:

angular.module('UserService',['ngResource']).factory('User', function($resource){
    var User = $resource('/api/users/:id1/:action/:id2', //add param to the url
    {id1:'@id'},
    { 
        delete_user: {
            method: 'DELETE'
        }
    }); 

    return User;
}); 

, это работает с:

// user has id
user.$delete_user(function(){
  //success
},function(){
  // error
});

или

var data = {id:'id_from_data'};
User.delete_user({},data);

или

var params = {id1:'id1_from_params'};
User.delete_user(params);

Я сделал plnkr-example - вам нужно открыть консоль, чтобы убедиться, что запросы DELETE верны.

См. параметрDefaults в Документация угловых ресурсов .

28
ответ дан joakimbl 24 April 2013 в 07:54
поделиться

У меня была эта проблема некоторое время, когда я использовал сервис для добавления / удаления / обновления категорий. При передаче параметров для get он работал нормально, но затем при удалении он дал мне? Id = 1234 вместо api / resource / 1234

Я обошел это, сделав параметр по умолчанию строкой.

/// Контроллер

Service.delete({categoryId:id}, function(resp){
  console.log(resp)//whatever logic you want in here 
});

// УСЛУГИ

$resource('api/resource/:categoryId', {"categoryId":"@categoryId"}, {
   query:{method:"GET"},
   delete:{method:"DELETE"},

});

Должен работать, и получающийся URL будет, первоначально у меня был categoryId в параметрах по умолчанию как имя переменной.

api/resource/1234 etc
2
ответ дан Evan Burbidge 24 April 2013 в 07:54
поделиться

Просто опустите '@' в параметре

   .factory('reportFactory', ['$resource', 'baseUrl', function ($resource, baseUrl) {
        return $resource(baseUrl + '/keys/:id', {}, {
        delete: { method: 'DELETE',
            headers: {
                'Content-Type': 'application/json'
            },
            params: {id: 'id'} }
       })
}]);

, это даст вам:

  http://localhost:8080/reports/api/keys/b8a8a8e39a8f55da94fdbe6c 

без знака вопроса

0
ответ дан Laura Liparulo 24 April 2013 в 07:54
поделиться

Если вы хотите удалить модель, нет необходимости добавлять параметры (параметры в любом случае не удаляются для DELETE):

$resource('/users/:id').delete({id: user.id}, function(res) {
  ...
})

или

$resource('/users/:role/:id').delete({role: 'visitor', id: user.id});

Я не уверен, что это ошибка ngResource.

0
ответ дан Alvan Zhu 24 April 2013 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: