我正在操纵一棵数据树。从任何给定节点,我可能需要添加从RESTful服务器返回的子节点。数据开始看起来像这样......
[{ "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。真棒。但我不知道如何使用新数据更新$ scope。我的观点看起来像这样......
<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 :(得分: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;
其次,我不知道你是不是只是为了简单而离开了东西,但你原来的ng-repeat
循环没有解决childNodes,所以你拥有它,没有办法判断确实它正在更新。无论如何,看看小提琴,看看我做了什么让它工作。