2017-02-07 5 views
0

Я пытаюсь использовать метод $ 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); 
    } 
} 
}]); 
+0

установите точку останова в 'Todos.get(), затем (function (data) {...})' и проверьте, что именно вы назначаете '$ scope.todos'. Я предполагаю, что это не ** массив. –

+0

Проблема заключается в вашем первоначальном назначении 'todos' - вы должны регистрировать переменную' data' в ответе '.then' - это не массив – tymeJV

ответ

0

Потому что ты не объявлял $ scope.todos поэтому его возвращение не определено и не толчок функция, я думаю, вы должны объявить свою таблицу раньше:

angular.module('app') 

    .controller('TodoController', ['$scope', 'Todos', function TodoController($scope, Todos) { 
    $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){ 

     }); 
    }; 
+0

Я добавил строку $ scope.todos = []; к моему контроллеру, но все равно не работает. Спасибо –

+0

у вас все еще есть TypeError: $ scope.todos.push не является функцией –

+0

Я обновляю свой ответ –

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