Angular 2无法识别DOM更改

时间:2015-11-16 10:09:23

标签: javascript angular

我在项目中使用了一些角度2组件,我需要更改组件的一些位置。我首先使用DOM来改变位置,比如replaceChild或insertBefore,就像那样。但是我注意到角度2不知道DOM的变化,看起来我的DOM变化超过了角度2的生命周期。 那么,有什么办法可以在angular2中编辑DOM吗?或者某种方式我可以改变组件的顺序?

因为你可以理解我在做什么,我正在构建一些组件,我想拖动它们并切换它们的位置。我在JQuery中找到了一个插件,你可以在它的GitHub网站上找到一个gif(https://github.com/Barrior/DDSort/blob/master/img/ddsort.gif)。我想实现类似gif的东西。

我在GitHub上找到了一些可能有帮助的东西,但我不知道如何使用它。 https://github.com/angular/angular/blob/master/modules/angular2/src/core/linker/view_manager.ts

2 个答案:

答案 0 :(得分:0)

我意识到这是前一段时间被问过的,但是对于那些可能会遇到类似问题的人来说...... Angular使用的区域我认为是猴子补丁异步JavaScript操作。

要触发Angular可能无法获取的DOM更新,您可以使用区域运行...

import { NgZone } from '@angular/core';

@Injectable()
export class SomeService {

    constructor(private zone: NgZone) {}

    someFunction() {
        this.zone.run(() => {
            // Your code goes here!
        });
    }

}

看看这个blog on zones

答案 1 :(得分:0)

要遵循最佳实践,开发人员应使用ViewChild来修改/使用DOM。这是example的示例,展示了如何使用ViewChild获得DOM元素。您可以使用“#”标记要使用的元素,并将其放在组件上。

如果要在组件中获取子元素的集合,则应使用ViewChildren

这个问题是我开始学习Angular时提出的,这是一个愚蠢的问题,我相信有很多初学者喜欢直接操作DOM。请以“ Angular Way”更新您的DOM。