0

これを数時間試してみましたが、これはとても簡単なはずですが、なぜこれが機能しないのかわかりません。

ダミーリストは、それが機能するかどうかをテストするためだけのものです。ただし、サーバー側のデータ ソースに接続するときはそうではありません。ajax 呼び出しによって返される Json は、ダミー リスト内のものと同じです。

私は何を間違っていますか?

ダミーリストを使用した実際の例へのリンクは次のとおりです: 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" }];
}
4

1 に答える 1

3

ここでうまくいかないことがいくつかあります。

  1. $.ajax値ではなくプロミスを返す非同期呼び出しです。つまり、getAllCurrenciesメソッドは約束を返しています。実際に行う必要があるのは、その promise のsuccess()関数にサブスクライブし、サーバーから値が返されるのを待つことです。... しかし...
  2. Angular アプリケーションで AJAX を実行するために JQuery を使用しないでください。これを行う必要はほとんどないはずです。$http代わりに使用してください。ajax が返された後にダイジェストがトリガーされるようにします。
  3. JQuery の AJAX を使用する必要がある場合は$apply、スコープを更新した後に使用する必要があります。

これは、より「角度のある」方法でそれを行う例を含む更新されたプランカーです。

于 2013-04-29T15:16:52.600 に答える