Angular2路由器与Material Design Lite交互

时间:2016-03-22 18:42:30

标签: angular material-design-lite

我遇到了Angular2路由器和Material Design Lite(MDL)动画之间的交互。如果我在Angular2中由<input>组件呈现的组件中创建<router-outlet>元素,则MDL无法正确处理与其的交互(不显示焦点动画,不清除占位符)文字等)。另一方面,如果<input>出现在<router-outlet>之外,则没有问题。

似乎它与<router-outlet>内容的动态性质有关。我以为this会解决这个问题。我在我的应用程序中添加了ngAfterViewInitngAfterViewChecked处理程序(甚至扩展到RouterOutlet的自定义指令)。没运气。我可以看到componentHandler变量并调用updateDom方法......没问题。但它没有效果。

必须有某种方法让MDL“看到”这些动态创建的元素,但我对upgradeDom的尝试并没有奏效。也许upgradeDom不是问题......但那是什么。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

所以经过进一步的挖掘,我以为我找到了a solution。和plunkr一起玩,我能够证明对componentHandler.<something>的正确手动调用可以解决我在该插件中设法设定的类似问题。

但是,那里(创建一个自定义指令触发指令附加到的生命周期事件上的调用)的方法并没有解决我的问题。 router-outlet的“动态”性质仍在干扰。据我所知,调用componentHandler仍然为时过早,并且在router-outlet真正更新DOM之前完成。

我最终要做的是在activate的{​​{1}}方法中添加一些代码。我已经创建了一个自定义RouterOutlet类,因此很容易将代码粘贴到RouterOutlet方法中。

但是,我发现必要是等到与activate方法关联的Promise解决之后。所以我做了这样的事情:

activate

<强>更新

我还没有确认,但我怀疑我提到的其他解决方案不起作用的原因是another issue I ran across。我怀疑正确解决这个问题会让我在这里引用的其他解决方案起作用。