Служба $http в Factory возвращает undefined в AngularJS

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

Фабрика :

(function () {
'use strict';

 angular
.module('app', [])
.factory("crudFactory", function (path, myObj) {
     return {
         AddObject: function (path)
         {
             $http({
                 method: "POST",
                 url: path,
                 params: { myObj : myObj }
             }).then(function mySuccess(response) {
                 return response.data;
             }, function myError(response) {
                 return "Error Found :" + response.statusText;
             });
         },
         first: function () {
             return "";//
         }
     };
});
})();

Я хочу использовать эту фабрику в контроллере, но она не работает.

Контроллер:

(function () {
'use strict';
debugger;
  angular
 .module('app')
 .controller('BusinessProfileCtrl', BusinessProfileCtrl);

function BusinessProfileCtrl($scope, crudFactory) {
    debugger;
    var vm = this; //vm = view model
    function Save() {
        debugger;
        var businessObj = {
            Id:vm.Id,
            Name: vm.Name,
        };
        var abc = crudFactory.AddObject("http://localhost:63358/BusinessUnit/Post", businessObj);
    }
    vm.Save = Save;
}
 })();

Надежда получит любую помощь. Заранее спасибо.


person Community    schedule 24.02.2017    source источник
comment
Определить не работает. Что вы делаете, чего вы ожидаете, что происходит вместо этого? Что вы ожидаете от переменной abc, поскольку AddObject ничего не возвращает?   -  person JB Nizet    schedule 24.02.2017
comment
Метод $http POST должен использовать для данных свойство data, а не params.   -  person georgeawg    schedule 25.02.2017


Ответы (1)


на фабрике просто верните обещание http и с контроллера перехватите это обещание.

изменить фабрику следующим образом;

.factory("crudFactory", function() {
    return {
        AddObject: function(path,myObj) {
            return $http({
                method: "POST",
                url: path,
                params: {
                    myObj: myObj
                }
            })
        },
        first: function() {
            return ""; //
        }
    };
});

в контроллере поймать промис вот так

var abc;
crudFactory.AddObject("http://localhost:63358/BusinessUnit/Post", businessObj).then(function mySuccess(response) {
    abc = response.data;
}, function myError(response) {
    abc = "Error Found :" + response.statusText;
});
person Sachila Ranawaka    schedule 24.02.2017
comment
bro function BusinessProfileCtrl($scope, crudFactory) {} подходит ли этот синтаксис? - person ; 24.02.2017
comment
да, это правильно, хотя factory("crudFactory", function (path, myObj) { это неправильно. параметры должны быть удалены. только что обновил ответ - person Sachila Ranawaka; 24.02.2017