Сервис $http в Factory возвращает неопределенное значение в AngularJS

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

Фабрика:

(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;
}
 })();

Надеюсь, вам помогут. Заранее спасибо.

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;
});
Другие вопросы по тегам