Dragula Angular2使用可观察的

时间:2016-07-15 22:25:29

标签: javascript angularjs angular observable dragula

我正在使用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.itemsthis.items[0].children[0].text = "1000"那样手动更新reloadItems(),它可以按照我的意愿运行。我应该以这种方式手动更新整个对象吗?看起来像黑客

**编辑2 ** 我设法通过在loadItems()中订阅然后比较reloadItems中的2个对象,然后在那里进行任何必要的更改来使其工作。我认为由于订阅它是自动更新。任何人都可以确认我是否做错了/正确(工作plnkr here,省略角度依赖)

0 个答案:

没有答案