2013-04-10 67 views
1

我在操縱數據樹。從任何給定的節點,我可能需要添加從RESTful服務器返回的子節點。該數據開始出去找這樣的事情...替換Angular中的子節點

[{ "text":"Apples", "id":1, "childNodes":[] }, 
{ "text":"Boxes", "id":2, "childNodes":[] }, 
{ "text":"Cups", "id":3, "childNodes":[] }] 

然後我做的「ID:1」的後返回...

[{ "text":"Apples", "id":1, "childNodes":[ 
    { "text":"first Apple", "id":'1a', "childNodes":[] }, 
    { "text":"second Apple", "id":'1b', "childNodes":[] }, 
    { "text":"third Apple", "id":'1c', "childNodes":[] } 
    ] 
}] 

...這是請求節點的完全替代。我有Angular正確地佈置模型,接受數據更改,將這些更改發佈到服務器,並接受最後一個JSON blob。真棒。但我不確定如何使用新數據更新$範圍。我查看看起來是這樣的......

<div ng-repeat="node in data.nodes" > 
    <p>{{node.text}}</p> 
    <button ng-click="addLoopInstance(node)">Add child nodes</button> 
</div> 

和控制器......

function SurveyController($scope, sampleService) { 

    $scope.addLoopInstance = function(node) { 
     sampleService.post({ id: node.id }, function(response, getResponseHeaders) { 
      // this doesn't work 
      node = response; 
      // neither does this 
      $scope.$apply(function() { 
       node = response; 
      }); 
     }); 
    } 

} 

有什麼想法?在此先感謝,Angular文檔是...想要......但我發現用戶羣非常有幫助。

+0

你不需要'node.childNodes = response.childNodes'嗎? – 2013-04-10 19:04:57

回答

3

只是要斷你說什麼,我建了一個樣品小提琴:http://jsfiddle.net/VXxqM/3/這個

兩件事情,雖然,你addLoopInstance(),如果它返回:

[{ "text":"Apples", "id":1, "childNodes":[ 
    { "text":"first Apple", "id":'1a', "childNodes":[] }, 
    { "text":"second Apple", "id":'1b', "childNodes":[] }, 
    { "text":"third Apple", "id":'1c', "childNodes":[] } 
    ] 
}] 

然後,你需要引用要替換子節點:

node.childNodes = response[0].childNodes; 

其次,我不知道如果你是剛剛離開的東西出來簡單起見,但你的原廠l ng-repeat循環沒有解決childNodes問題,因此您無法確定它是否正在更新。無論如何,檢查小提琴,看看我做了什麼,以使其工作。

+0

是的,我只是困惑我試圖插入的響應水平。謝謝你以正確的方式指點我。 – 2013-04-11 14:50:41