1

我正在处理一棵数据树。从任何给定节点,我可能需要添加一个从 RESTful 服务器返回的子节点。数据开始看起来像这样……</p>

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

然后我写了一个“id:1”的帖子,它返回……</p>

[{ "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。我的视图看起来像这样……</p>

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

和控制器……</p>

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 文档是……想要……但我发现用户群非常有帮助。

4

1 回答 1

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,所以你有它,没有办法判断它是否确实正在更新。不管怎样,看看小提琴,看看我做了什么让它工作。

于 2013-04-10T19:16:07.837 回答