2016-06-06 3 views
1

loadNextToLocation теперь ожидает ViewContainerRef, любые идеи о том, как правильно получить корневой viewContainerRef приложения?как получить root viewContainerRef of angular2 aplication

благодарит заранее.

Update:

я хочу, чтобы получить корневой viewContainerRef из любого класса или любого компонента

ответ

1

Я не пробовал его с корневым компонентом себя, но пока я предполагаю, что это работает так же, как и с другими компонентами:

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

спасибо Günter Zöchbauer, он работает с другим компонентом, чем AppComponent большое спасибо Günter Zöchbauer –

+0

Затем установите его на общую услугу и приобретите его из той службы, где вам это нужно. Насколько я знаю, нет официального способа получить «ViewContainerRef» из корневого компонента вне корневого компонента. –

+0

жаль, что это не сработало, я не могу отредактировать свой комментарий Вы правы, я должен держать root ViewContainerRef в памяти до тех пор, пока он мне не понадобится , но это лучшее решение? –

6

СТАРЫЙ пУТЬ: Угловая 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 в конструкторе (и сделал он публичный) вы можете теперь ссылаться на него напрямую.

+0

большое спасибо @dsara –

Смежные вопросы