【发布时间】:2016-03-20 23:51:44
【问题描述】:
我遇到了一个问题,如果我动态加载一个组件,模板中的任何绑定都不适合我。除此之外,ngOnInit 方法永远不会被触发。
loadView() {
this._dcl.loadAsRoot(Injected, null, this._injector).then(component => {
console.info('Component loaded');
})
}
动态加载的组件
import {Component, ElementRef, OnInit} from 'angular2/core'
declare var $:any
@Component({
selector: 'tester',
template: `
<h1>Dynamically loaded component</h1>
<span>{{title}}</span>
`
})
export class Injected implements OnInit {
public title:string = "Some text"
constructor(){}
ngOnInit() {
console.info('Injected onInit');
}
}
这是我第一次使用动态加载的组件,所以我认为可能尝试不正确地实现它。
这里有一个plunkr 来演示这个问题。任何帮助将不胜感激。
【问题讨论】:
-
有一个已知的issue 和
loadAsRoot。你现在最安全的选择是使用loadNextToLocation或loadIntoLocation。 -
@EricMartinez 我要加载的组件是一个模态对话框。我试图从中加载它的组件位于具有
fixedcss 样式的元素内,因此该对话框几乎需要作为body标记的第一个子项加载。我可以在深度嵌套的组件中使用loadNextToLocation或loadIntoLocation执行此操作吗? -
我认为你可以用纯 CSS 来解决这个问题。如果您将每个位置设置为 0(上、左、右、下)、固定位置和较高的 z-index 值,则无论加载到何处,您都可以拥有一个模态对话框。
-
@EricMartinez 我很欣赏这一点,但我真的不想因为这个错误而搞乱对我来说工作得很好的 CSS。我决定通过前向引用传递根
AppComponent,现在使用loadIntoLocation和AppComponent的ElementRef。感谢您的帮助。 -
您可以添加您的解决方案作为答案,可能对其他人有所帮助
标签: javascript angular