Crud с angularjs и http-сервисом

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

app.factory('MainService', function($http) { 

    var getFeaturesFromServer = function() {
        return $http.get('restfullfeatures/features');
    }


    var deleteFeature = function(id) {
        return $http.post('restfullfeatures/delete', {'id': id});
    }

    var createFeature = function(feature) {
        return $http.post('restfullfeatures/create', {'title': feature.title, 'description': feature.description});
    }

    return {
        getHello : getHello,
        getFeatures: getFeaturesFromServer,
        deleteFeature: deleteFeature,
        createFeature: createFeature
    }

});

и моя функция добавления в контроллере выглядит так:

$scope.add = function(){

        MainService.createFeature($scope.formFeature)

            .then(function(response) {
                console.log('feature created',response.data);
                $scope.features.push($scope.formFeature);
                $scope.formFeature = {};
            }, function(error) {
                alert('error',error);

        });

    };

И это моя функция postCreate:

public function postCreate()

{
    \App\Feature::create(
        ['title' => \Input::get('title'), 
        'description' => \Input::get('description')
        ]);

    return ['success' => true];

}

У меня есть таблица в моей базе данных, называемая функциями, поэтому в основном я пытаюсь добавить новую функцию в свою таблицу с помощью angularjs, мой контроллер, похоже, не распознает formFeature, все, что я получаю, является «неопределенным», тогда я получаю сообщение об ошибке: Cannot read свойство типа undefined, но я использую его в своей функции удаления, и оно отлично работает, что я здесь пропустил??


person Guest012393    schedule 27.08.2015    source источник
comment
Из вашего кода видно, что formFeature определяется в ответе с сервера в createFeature. Вы инициализируете его, когда создается относительный контроллер?   -  person    schedule 27.08.2015
comment
Как я могу его инициализировать?? Пожалуйста, потерпите меня, я новичок во всем этом. Спасибо   -  person Guest012393    schedule 27.08.2015
comment
В начале тела контроллера просто сделайте $scope.formFeature = {};. К сожалению, я подозреваю, что что-то еще происходит...   -  person    schedule 27.08.2015
comment
омг работает!! Большое спасибо   -  person Guest012393    schedule 27.08.2015
comment
Пожалуйста, рад, что это сработало   -  person    schedule 27.08.2015


Ответы (1)


Фабрика

Итак, при создании фабрики для CRUD попробуйте расположить фабрику, как показано в примере ниже. Примером является некоторый код, который я написал для проекта, каждый вызов будет делать разные вещи, идея состоит в том, что вы добавляете метод, который вы можете создать, когда добавляете фабрику в свой контроллер. (примечание: не используйте $rootScope для сеанса)

.factory('Chats', function ($http, $rootScope, $stateParams) {

  return {
    all: function () {
      return $http.get('http://your_ip/chats', { params: { user_id: $rootScope.session } })
    },
    get: function () {
      return $http.get('http://your_ip/chat', { params: { user_id: $rootScope.session, chat_id: $stateParams.idchat } })
    },
    add: function (id) {
      return $http.post('http://your_ip/newChat', { params: {idfriends:id}})
    }
  };
});

Контроллер

когда вы создаете экземпляр этого в своем контроллере, вы смотрите на что-то вроде этого

.controller('ChatsCtrl', function ($scope, Chats) {

  Chats.all().success(function (response) {
    $scope.chats = response;
  });
  $scope.getChat = function (id) {
    Chats.get().success(function (response) { })
  };

  $scope.addChat = function (id) {
    Chats.add(id).success(function (response) { })
  };
})

$scope.remove и $scope.addChat и связаны с кнопками, которые будут выполняться при нажатии, а $scope.chats привязано к странице через ng-repeat.

Заключение

Очистите свои фабрики, чтобы они выглядели так, и вы сможете легко написать ряд повторно используемых методов, которые легко реализовать в вашем контроллере.

person Joe Lloyd    schedule 27.08.2015