文字列の1次元配列がAngularリソースによって2次元に解析される質問する

文字列の1次元配列がAngularリソースによって2次元に解析される質問する

サーバーからの次のJSON応答

[
    "hello",
    "world"
]

このngResourceサービスによって2次元配列に解析されています

myService.factory('Name', function($resource){
    return $resource(site_url+'api/accounts/:accountId/names/', {}, {
        list: {method:'GET', params:{}, isArray:true}
    });
});

このように呼ばれる

$scope.names = Name.list({accountId:$scope.account.id}, function(e){
    console.log(e);
});

痕跡は

[{"0":"h","1":"e","2":"l","3":"l","4":"o"},{"0":"w","1":"o","2":"r","3":"l","4":"d"}]

何かヒントはありますか?

ベストアンサー1

TLDR;ngリソースオブジェクトまたは配列を期待するオブジェクトあなたの応答で。


アクションリストでisArrayが設定されている場合、truengリソースモジュールはレスポンスで受信した各アイテムを反復処理し、リソースの新しいインスタンスを作成します。これを行うために、Angularは受信したアイテムとクラスの間でディープコピーを実行し、特別なメソッド(など)Resourceを持つオブジェクトを提供します。$save$delete

チェックしてくださいソースはこちら

内部的に角度のある用途角度コピーディープコピーを実行するために、この機能はオブジェクトそして配列文字列を渡すと、オブジェクトのように扱われます。

JSの文字列は、各文字への連続アクセスを提供することで配列として動作できます。angular.copy文字列を渡すと次のようになります。

angular.copy('hi',{})   => {0:'h', 1:'i'}

各文字はオブジェクト内の値になり、そのインデックスがキーとして設定されます。ngリソースプロパティとを持つリソースを提供します01


選択肢は次のとおりです:

下層階を使用する$httpサービス

$http.get('/res').success(function(data){
  $scope.test = data;
});

JSONレスポンスでオブジェクトの配列を返す

[{'data': "hello"}, {'data': "world"}] 

応答を傍受してデータを変更する

サーバーから返されるデータを変更できず、ngリソース応答を変換する必要があります。その方法を読んでくださいここ

おすすめ記事