如何获取angular2 aplication的root viewContainerRef

时间:2016-06-06 14:55:19

标签: angular

loadNextToLocation现在需要一个ViewContainerRef,关于如何以正确的方式获取应用程序的根viewContainerRef的任何想法?

提前感谢。

更新

我想从任何类或任何组件获取root viewContainerRef

2 个答案:

答案 0 :(得分:12)

OLD WAY:Angular 2.0.0-rc.3

这是一个完全黑客攻击,绝不是获取根ViewContainerRef的正确方法,但我无法找到正式的方法来执行此操作。由于这些不是公共属性,因此可以随时更改,此方法将不再有效。此方法仍然适用于2.0.0-rc.3。

let destination = segue.destinationViewController
if let navcon = destination as? UINavigationController {
    destination = navcon.visibleViewController!
}
if let hvc = destination as? TableViewController{
   // do whatever
}

GitHub目前还有一个未解决的问题:https://github.com/angular/angular/issues/9293

更新:Angular 2.4.2

上述方法不适用于Angular的更高版本(从2.4.2开始)。

我现在使用的方法是:

在根组件中传递ViewContainerRef,以便稍后引用它:

class SomeComponent {
    constructor(private appRef: ApplicationRef) { }
    let viewRef: ViewContainerRef = appRef['_rootComponents'][0]['_hostElement'].vcRef;
}

然后在要获取根ViewContainerRef的组件或服务中:

class AppComponent {
    constructor(public viewRef: ViewContainerRef) { }
}

以上内容将引入根组件的实例,并且由于您在构造函数中注入了ViewContainerRef(并使其公开),您现在可以直接引用它。

答案 1 :(得分:2)

我还没有尝试使用root组件,但我认为它与其他组件的工作方式相同:

class AppComponent {
  constructor(private vcRef:ViewContainerRef) {}
}