Я пытаюсь использовать метод $ http.get, чтобы добавить todo из моего контроллера в свою БД. Но я получаю сообщение об ошибке «TypeError: $ scope.todos.push не является функцией». Я рассмотрел многие подобные вопросы и сам попытался реализовать предложения, не добившись успеха. Проблема заключается в функции $ scope.createTodo для TodoController.
todo.controller.js
angular.module('app')
.controller('TodoController', ['$scope', 'Todos', function TodoController($scope, Todos) {
$scope.formData = {};
console.log("in the TodoController");
// when landing on the page, get all todos and show them
Todos.get()
.then(function (data){
$scope.todos = data;
}).then(function (error){
});
$scope.createTodo = function() {
if(!$scope.todoForm.$valid) {
return;
}
Todos.create($scope.formData)
.then(function (data){
$scope.formData = {};
$scope.todos.push(data);
}).then(function (error){
});
};
todo.service.js
angular.module('app')
.factory('Todos', ['$http', function($http) {
return {
get: function() {
return $http.get('/api/todos');
},
create: function(todoData) {
return $http.get('/api/todos', todoData).then(function (success){
},function (error){
});
},
delete: function(id) {
return $http.delete('/api/todos/' + id);
},
update: function(todoData) {
return $http.put('/api/todos/' + todoData.id, todoData);
}
}
}]);
установите точку останова в 'Todos.get(), затем (function (data) {...})' и проверьте, что именно вы назначаете '$ scope.todos'. Я предполагаю, что это не ** массив. –
Проблема заключается в вашем первоначальном назначении 'todos' - вы должны регистрировать переменную' data' в ответе '.then' - это не массив – tymeJV