Пользователи могут искать название фильма в моем поле ввода, и он покажет им список фильмов. Затем они могут наводиться над заголовком, и появляется кнопка " Add Movie
. Они могут щелкнуть по нему, чтобы он был добавлен на их главную страницу. Но теперь я пытаюсь понять, как они могут удалить этот фильм из базы данных. Но я не могу найти ясный пример того, как это сделать.
Вот как я показываю фильмы,
%div{"ng-repeat" => "movie in movies"}
{{ movie.id }}
{{ movie.title }}
%a{"ng-click" => "deleteMovie($index)"}delete
Я думаю, что мне нужно создать действие delete в моем контроллере с именем deleteMovie
которое работает с сервисом для удаления идентификатора из базы данных.
Вот как я вижу услугу,
.factory('removeMovie', ['$http', function($http) {
return {
deleteMovie: function() {
return $http.delete('/movies.json/$id');
}
};
}])
В deleteMovie
будет вызываться deleteMovie
. Но у меня такое чувство, что я приближаюсь к этому неправильно.
Пожалуйста, следуйте приведенному ниже коду.
Просмотр 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( "/кино/" +_movieId);
Передайте весь объект фильма, чтобы вы могли использовать его для сообщения, а также просто индексировать его в массиве для локального удаления.
Отрегулировать завод для идентификатора
.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 на одной фабрике
если служба вызывает только один HTTP-вызов, вы можете хорошо написать, что уже я ваш контроллер:
Посмотреть:
%div{"ng-repeat" => "movie in movies"}
{{ movie.id }}
{{ movie.title }}
%a{"ng-click" => "deleteMovie(movie.id)"}delete
и в контроллере
.controller('myCtrl', ['$scope', '$http', function($scope, $http) {
$scope.deleteMovie = function(id) {
$http.delete('/movies.json/' + id);
}
}])