我遇到了Angular2路由器和Material Design Lite(MDL)动画之间的交互。如果我在Angular2中由<input>
组件呈现的组件中创建<router-outlet>
元素,则MDL无法正确处理与其的交互(不显示焦点动画,不清除占位符)文字等)。另一方面,如果<input>
出现在<router-outlet>
之外,则没有问题。
似乎它与<router-outlet>
内容的动态性质有关。我以为this会解决这个问题。我在我的应用程序中添加了ngAfterViewInit
和ngAfterViewChecked
处理程序(甚至扩展到RouterOutlet
的自定义指令)。没运气。我可以看到componentHandler
变量并调用updateDom
方法......没问题。但它没有效果。
必须有某种方法让MDL“看到”这些动态创建的元素,但我对upgradeDom
的尝试并没有奏效。也许upgradeDom
不是问题......但那是什么。
有什么建议吗?
答案 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。我怀疑正确解决这个问题会让我在这里引用的其他解决方案起作用。