СТАРЫЙ пУТЬ: Угловая 2.0.0-rc.3
Это общая хак и никоим образом не правильный путь, чтобы получить корень ViewContainerRef, но я ж как неспособный найти официальный способ сделать это. Поскольку они не являются общедоступными, они могут меняться в любой момент, и этот метод больше не будет работать. Этот метод по-прежнему работает с 2.0.0-rc.3.
class SomeComponent {
constructor(private appRef: ApplicationRef) { }
let viewRef: ViewContainerRef = appRef['_rootComponents'][0]['_hostElement'].vcRef;
}
Существует также в настоящее время является открытым вопрос для этого на GitHub: https://github.com/angular/angular/issues/9293
UPDATE: Угловая 2.4.2
выше метод не будет работать с более поздними версиями углового (по состоянию на 2.4.2).
Метод, который я использую сейчас это:
В корневой компонент проходит ViewContainerRef, так что вы можете ссылаться на него позже:
class AppComponent {
constructor(public viewRef: ViewContainerRef) { }
}
, а затем в компоненте или услуги, которые вы хотите получить корень ViewContainerRef:
class SomeOtherComponent {
constructor(private appRef: ApplicationRef) { }
let viewRef = (appRef.components[0].instance as AppComponent).viewRef;
}
выше принесет в случае вашего корневого компонента, и так как вы вводили ViewContainerRef в конструкторе (и сделал он публичный) вы можете теперь ссылаться на него напрямую.
спасибо Günter Zöchbauer, он работает с другим компонентом, чем AppComponent большое спасибо Günter Zöchbauer –
Затем установите его на общую услугу и приобретите его из той службы, где вам это нужно. Насколько я знаю, нет официального способа получить «ViewContainerRef» из корневого компонента вне корневого компонента. –
жаль, что это не сработало, я не могу отредактировать свой комментарий Вы правы, я должен держать root ViewContainerRef в памяти до тех пор, пока он мне не понадобится , но это лучшее решение? –