2013-04-29 39 views
0

我現在已經嘗試了幾個小時這應該是如此容易,但我不明白爲什麼我沒有得到這個工作。我在做這個Angularjs ng-repeat錯誤的是什麼?

虛擬列表僅用於測試它應該工作,它確實如此。但是,當我連接我的服務器端數據源。由ajax調用返回的Json與啞元列表中的Json相同。

我在做什麼錯了?

這裏是一個鏈接到工作實施例與dummylist:http://plnkr.co/edit/6nBkdBpPVqQ2P8u2BEeY

服務器側爲.NET MVC 4應用程序。

HTML:

<div data-ng-controller="currencyController"> 
    <ul> 

     <li data-ng-repeat="currency in currencies"><span>{{ currency.CurrencyCode}} - </span><span>{{ currency.CurrencyName }}</span> 
    </li> 

    </ul> 
</div> 

JS:

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

currencyTools.controller('currencyController',function(currencyService,$scope) { 
    var path = 'currency/GetCurrencies'; 
    currencyService.getAllCurrencies(path, function (jsonResult) { 
     $scope.currencies = jsonResult.data; 
    }); 
    // $scope.currencies = dummyList(); //if i uncomment this it works 
}) 





currencyTools.factory('currencyService', function() { 
    var service = { 
     getAllCurrencies: function (path, callback) { 
      var result = $.ajax({ 
       url: path, 
       type: 'GET', 
       dataType: 'json', 
       data: '', 
       contentType: 'application/json; charset=utf-8', 
       success: function(json) { callback(json); } 
      }); 
      return result; 
     } 
    }; 
    return service; 
}); 


function dummyList() { 
    return [ 
    { "CurrencyCode": "BAM", "CurrencyName": "Bosnia-Herzegovina Convertible Mark" }, 
    { "CurrencyCode": "BBD", "CurrencyName": "Barbadian Dollar" }, 
    { "CurrencyCode": "BDT", "CurrencyName": "Bangladeshi Taka" }, 
    { "CurrencyCode": "BGN", "CurrencyName": "Bulgarian Lev" }, 
    { "CurrencyCode": "BHD", "CurrencyName": "Bahraini Dinar" }, 
    { "CurrencyCode": "BIF", "CurrencyName": "Burundian Franc" }, 
    { "CurrencyCode": "BMD", "CurrencyName": "Bermudan Dollar" }, 
    { "CurrencyCode": "BND", "CurrencyName": "Brunei Dollar" }, 
    { "CurrencyCode": "BOB", "CurrencyName": "Bolivian Boliviano" }, 
    { "CurrencyCode": "BRL", "CurrencyName": "Brazilian Real" }, 
    { "CurrencyCode": "BSD", "CurrencyName": "Bahamian Dollar" }, 
    { "CurrencyCode": "BTC", "CurrencyName": "Bitcoin" }]; 
} 
+0

我建議審查問題進一步。嘗試使用JavaScript調試器來檢查函數中各個點的值。例如,我會很好奇在成功回調中知道'jsonResult.data'的值。 – 2013-04-29 15:11:29

+0

究竟是什麼問題? – remigio 2013-04-29 15:15:18

回答

3

有一些事情出錯這裏。

  1. $.ajax是一個異步調用,它返回一個promise,而不是一個值。所以你是getAllCurrencies方法正在返回一個承諾。你真的需要做的是訂閱承諾的success()函數並等待從服務器返回的值。 ...但...
  2. 不要使用JQuery在Angular應用程序中執行AJAX。你應該幾乎不需要那樣做。改爲使用$http。它會確保ajax返回後觸發摘要。
  3. 如果你必須使用JQuery的AJAX,你必須在更新範圍後使用$apply

Here's an updated plunker with an example of doing it in a more "angular" way.

+1

非常感謝您的解釋和解決方案。我的大腦一直在跆拳道#!!現在幾個小時:)這個$ http對我來說是全新的,第一次嘗試Angular。乾杯! – Kimpo 2013-04-29 15:27:16

相關問題