1

在角度js工厂中调用ASP.NET MVC Controller Action方法时遇到麻烦。ASP.NET MVC中的Angular JS工厂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部分代码如下所示。 当我试图从控制器绑定一些$ scope 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