2015-08-26 4 views
0

Пользователи могут искать название фильма в моем поле ввода, и он покажет им список фильмов. Затем они могут навешиваться над заголовком и появляется кнопка Add Movie. Они могут щелкнуть по нему, чтобы он был добавлен на их главную страницу. Но теперь я пытаюсь понять, как они могут удалить этот фильм из базы данных. Но я не могу найти ясный пример того, как это сделать.Удалить идентификатор, используя Angular

Это, как я показываю фильмы,

%div{"ng-repeat" => "movie in movies"} 
    {{ movie.id }} 
    {{ movie.title }} 
    %a{"ng-click" => "deleteMovie($index)"}delete 

Я думаю, что я должен создать операции удаления в моем контроллере называется deleteMovie, который работает с сервисом, чтобы удалить идентификатор из базы данных.

Это, как я вижу, обслуживание,

.factory('removeMovie', ['$http', function($http) { 
    return { 
    deleteMovie: function() { 
     return $http.delete('/movies.json/$id'); 
    } 
    }; 
}]) 

The deleteMovie будет называться в контроллере. Но у меня такое чувство, что я приближаюсь к этому неправильно.

ответ

2

Пожалуйста, следуйте ниже кода.

HTML Посмотреть

%div{"ng-repeat" => "movie in movies"} 
{{ movie.id }} 
{{ movie.title }} 
%a{"ng-click" => "deleteMovie(movie)"}delete 

Контроллер

.controller('MainController', ['$scope','removeMovie', 
function($scope, removeMovie) { 
    $scope.deleteMovie = function(movie){ 
    removeMovie.deleteMovie(movie.id).then(function(sucessResponse){ 
     //success callback 
    },function(errorResponse){ 
     //Error callback 
    }) 
    } 
} 
]); 

завод

.factory('removeMovie', ['$http', function($http) { 
    return { 
    deleteMovie: function(movieId) { 
    var _movieId = parseInt(movieId); 
    return $http.delete('/movies.json/'+_movieId); 
    } 
}; 
}]); 

, если вы используете статический json, тогда вам не нужно делать какой-либо запрос на отдых. Вы можете просто сращивать фильм из фильмов array.if вы удаляете фильм из базы данных, тогда вам нужно сделать запрос на отдых следующим образом: $ http.delete ('/ movies /' + _ movieId);

1

если услуга вызывает только один HTTP вызов, вы можете задница хорошо писать, что уже я ваш контроллер:

вид:

%div{"ng-repeat" => "movie in movies"} 
    {{ movie.id }} 
    {{ movie.title }} 
    %a{"ng-click" => "deleteMovie(movie.id)"}delete 

и Inthe контроллер

.controller('myCtrl', ['$scope', '$http', function($scope, $http) { 
    $scope.deleteMovie = function(id) { 
     $http.delete('/movies.json/' + id); 
    } 
}]) 
2

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

Adjust завод по идентификатору

.factory('removeMovie', ['$http', function($http) { 
    return { 
    deleteMovie: function(id) { 
     return $http.delete('/movies/' +id); 
    } 
    }; 
}]); 

HTML

"ng-click" => "deleteMovie(movie)"}delete 

Теперь сделайте запрос от контроллера и удалить из локального массива на Достройка

$scope.deleteMovie = function(movie) { 
    removeMovie.deleteMovie(movie.id).then(function(resp){ 
     // validate your response here before next step 

     // get index of movie in array 
     var idx = $scope.movies.indexOf(movie); 
     //remove from array 
     $scope.movies.splice(idx, 1); 
    }); 
} 

Обратите внимание, что это кажется странным, чтобы иметь завод только для removeMovie. Обычно у вас есть все операции с CRUD на той же фабрике

Смежные вопросы