1

У вас возникли проблемы с вызовом методов действия ASP.NET MVC Controller из угловой фабрики js.Угловая фабрика JS в ASP.NET MVC 5

var HomeModule = angular.module('HomeModule', []); 

HomeModule.controller('HomeController', function ($scope) { 

}); 

Это мой угловой контроллер JS.

<div ng-app="HomeModule" class="row"> 
<div ng-controller="HomeController" class="row"> 

</div> 

Index.cshtml часть кода выглядит следующим образом. Когда я пытаюсь связать некоторую $ propetry от контроллера - это работает. Пожалуйста, помогите мне создать такую ​​фабрику, чтобы вызвать мои методы контроллера ASP.NET. Все мои решения дают мне ошибки в консоли.

someControllerApp.factory('someFactory', ['$http', function ($http) { 

var service = { 
    GetSomeData: function() { 
     return $http.post('/Some/SomeMethod'); 
    }, 
}; 
return service; 
}]); 

Ошибка:

angular.js:14324 TypeError: someFactory.GetSomeData(...).success is not a function 
at ChildScope.$scope.GetData (HomeController.js:7) 
at fn (eval at compile (angular.js:1), <anonymous>:4:141) 
at callback (angular.js:26673) 
at ChildScope.$eval (angular.js:17958) 
at ChildScope.$apply (angular.js:18058) 
at HTMLButtonElement.<anonymous> (angular.js:26678) 
at defaultHandlerWrapper (angular.js:3613) 
at HTMLButtonElement.eventHandler (angular.js:3601) 

Когда контроллер:

var HomeModule = angular.module('HomeModule', []); 

HomeModule.controller('HomeController', function ($scope, someFactory) { 

    $scope.GetData = function() { 

     someFactory.GetSomeData().success(function (data) { 
      if (data.isSuccess) { 
       $scope.Address = data; 
      } else { 
       window.location.assign("/Error/Error500"); 
      } 
     }); 
    }; 

}); 


HomeModule.factory('someFactory', ['$http', function ($http) { 

    var service = { 
     GetSomeData: function() { 
      return $http.post('/Home/GetUserData'); 
     } 
    }; 
    return service; 
    }]); 
+0

Какие ошибки в консоли? – KieranDotCo

+0

отредактировал сообщение с ошибкой –

ответ

1

Вы близки. Вам необходимо определить ваш завод как часть вашего углового модуля. Затем вы можете ввести завод в свой контроллер и использовать его. Как это:

var HomeModule = angular.module('HomeModule', []); 

HomeModule.controller('HomeController', ['$scope', 'someFactory', function($scope, someFactory) { 
    someFactory.GetSomeData().then(function(result) { 
    $scope.data = result.data; 
    }, function(err) { 
    console.log(err); 
    }); 
}]); 

HomeModule.factory('someFactory', ['$http', function($http) { 
    var service = { 
    GetSomeData: function() { 
     return $http.post('/Some/SomeMethod'); 
    }, 
    }; 
    return service; 
}]); 

Вот рабочий plunk

+0

Спасибо! Он также работает с методами возврата базовых типов и методами ActionResult. –

+0

Добро пожаловать. – jbrown

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