2014-06-13 80 views
0

我用指令ng-repeat訪問存儲在json中的一些值時出現了一些問題。json中的ng-repeat和嵌套數組

json格式正確(使用json檢查器進行檢查),它通過$ http服務調用。不幸的是我不能改變json的格式,通過wordpress-json-api插件檢索。

的JSON(有一些刪節):

{ 
    "status": "ok", 
    "count": 10, 
    "count_total": 24, 
    "pages": 3, 
    "posts": [ 
     { 
      "id": 108, 
      "type": "sensor", 
      "slug": "ert", 
      "custom_fields": { 
       "sensor_id": [ 
        "er" 
       ], 
       "coords": [ 
        "{\"address\":\"\",\"lat\":55.39979700000003,\"lng\":10.430533275390644,\"zoom\":12}" 
       ] 
      } 
     } 

     //etc other posts following, json correct 

現在我有訪問內部座標中單值的問題。我也抱怨分貝序列化的數據,但我想反正獲得液化天然氣和緯度的是陣列

<ul> 
    <li ng-repeat="post in sensor.posts"> 
     <h4>name : {{post.id}}</h4> //ok 
     <h4>all custom fields : {{post.custom_fields}}</h4> //good-this-too 
     <h4>custom field lat : {{post.custom_fields.prova_coords[0]}}</h4> //works but can't go on 
    </li> 

</ul> 

最後一行的輸出繼電器是:

custom field lat : {"address":"","lat":55.39979700000003,"lng":10.430533275390644,"zoom":12} 

但現在我stuck..can't檢索單lat和長值

+0

使用它,我想你可能需要使用'$範圍。$的eval(場)'來得到一個可用的JavaScript對象 –

回答

1

您需要使用$scope.$eval(coordsString)

這是一個測試:http://jsfiddle.net/mikeeconroy/Rnc7R/

var objString = "{\"address\":\"\",\"lat\":55.39979700000003,\"lng\":10.430533275390644,\"zoom\":12}"; 

$scope.coords = $scope.$eval(objString); 

那麼你可以參考coords.latcoords.lng在你的模板,像這樣:

<div ng-controller="myCoordsCtrl"> 
    Lattitude: {{coords.lat}}<br> 
    Longitude: {{coords.lng}} 
</div> 

因爲這是一個ngRepeat內發生的事情,你可能需要使用的角度濾波器,以糾正對飛

字符串
<li ng-repeat="post in sensor.posts | myRectifyCoordsFilter"> 

編輯

不要像上面的例子那樣使用過濾器,使用過濾器來修改$scope並不是一個好的情況。你將需要修改的ng-repeat

$http.get().success(function(data){ 
    angular.forEach(data,function(val,key){ 
     this.coords = $scope.$eval(val.coords[0]); 
    },data); 
    $scope.sensor = data; 
}); 
+0

感謝您的康羅伊之前$scope到,整潔!無論如何,我不能讓它在我有的函數內工作。$ http.get()。success(function(data){$ scope.sensor = data; ...})或者我應該「物化」所有東西? –

+0

它最有可能是因爲你正在使用'ng-repeat',並且需要在運行時轉換'$ scope'中的座標。看看如何做到這一點我的第一個傾向是使用一個過濾器,但我看到這可能是一個問題,因爲過濾器並不意味着要修改'$ scope'變量,否則就會皺起眉頭。你必須在你的成功功能中做到這一點,不幸的是,如果有很多帖子,這可能是一個性能問題。 –