我正在使用Angular2和ng2-dragula(基于dragula)编写树形控件。我目前正在使用与示例嵌套重复示例here非常相似的内容。我在列表中加载并按预期拖放工作没有问题。我需要做的是单击一个按钮,返回到http服务获取新数据,然后在页面上更新数据。我知道我可以使用javascript来查找id并以这种方式更新,但它似乎不是处理它的正确方法。
这是我的组件代码 - 所有这一切只是编写视图数据并完全撤消任何更改的拖动等(我确定这是设计)。我尝试了一些不同的方法来使用dragulaModel,但无论发生什么,无论整个组件是什么重新渲染。我需要能够更新子文本
我是棱角分明的新手,并希望确保我遵循正确的模式
item.component.ts
loadItems(){
this._itemsService.getIems();
}
reloadIems(){
this._itemsService.getItems();
}
item.component.html
<div *ngIf="items">
<div class="holder">
<div *ngFor="let item of items | async">
<div (click)="checkCollapsed(item.text)" >
<div *ngIf='item.children' [dragula]='"first-bag"'>
<div *ngFor='let child of item.children' class="item">
<span class="handle">+</span><span id='{{child.id}}' [innerHtml]="child.text"> </span>
</div>
</div>
</div>
</div>
</div>
</div>
修改
如果我将.subscribe添加到loadItems()
,然后像this.items
中this.items[0].children[0].text = "1000"
那样手动更新reloadItems()
,它可以按照我的意愿运行。我应该以这种方式手动更新整个对象吗?看起来像黑客
**编辑2 ** 我设法通过在loadItems()中订阅然后比较reloadItems中的2个对象,然后在那里进行任何必要的更改来使其工作。我认为由于订阅它是自动更新。任何人都可以确认我是否做错了/正确(工作plnkr here,省略角度依赖)