2013-08-23 92 views
3

我想從工廠調用ajax,但它不返回任何東西。我的代碼給出波紋管如何在angularjs中從工廠調用ajax?

var msfaWebPortal = angular.module('MsfaWebPortal', []) 
     .factory('personFactory', function() { 
      var factory = {}; 

      var people = []; 

      $.ajax({ 
       url: '@Url.Action("GetPerson","Home")', 
       success: function (data) { 
        people = data; 
       } 
      }); 

      factory.getPerson = function() { 
       return people; 
      }; 
      return factory; 
     }) 
    .controller('PersonCtrl', function ($scope, personFactory) { 
     $scope.friends = personFactory.getPerson(); 
     $scope.predicate = '-age'; 
    }); 

我錯過了什麼嗎?或者我該怎麼做?請幫幫我。

+0

爲什麼不使用angualrs的模塊呢? – Zlatko

+0

對不起.....我沒有得到你的問題?@zladuric –

+0

我的意思是,角提供了一個$ http進行Ajax調用。另外,在工廠或服務中,您可以使用$ resource來自動映射整個RESTful端點。 – Zlatko

回答

2

您應該使用Angulars的$ http進行這些調用。

即,

var app = angular.module('myApp', []).config(/* config stuff */); 
app.PersonFactory = angular.factory('PersonResource', function($http) { 
    /* your code here */ 
    /* when you want to make Ajax calls, use $http */ 
    $http.get('/some/url/to/persons') 
    .success(function (response) {...}) 
    .error(function(err){...}); 
    /* keep going */ 
}); 

此外,如果您的人員資源是RESTful,您可以使用$資源,即。

var app = angular.module('myApp', []).... /* setup app */ 
app.personsFactory = angular.factory('personsFactory', function($resource) { 
    var persons = $resource('/api/persons/:id', {id: '@id'}); 
    return persons; 
}); 

這樣角度就會知道你的/ API /人網址就可以得到的人,它可以發佈一個新的人,它可以把一個更新的人,刪除的人。

+0

然後你如何傳遞成功回調中收到的數據到你的控制器,例如添加到範圍? – c4k

+0

那麼,由於$ http是由角度提供的,所以它的成功回調可以訪問$ scope並且角度會在變化時消化它。所以,只要做一個$ http.get(url).success(function(data){$ scope.something = data;}) – Zlatko

+3

是的,但只有在控制器中調用$ http時纔可以做到這一點......您可以在工廠中訪問$ scope?!或者,也許我誤解了$ scope的作用。無論如何,我最後在我的工廠方法中添加了一個參數「callback」,由$ http.success調用並在我的控制器中執行 – c4k