2016-09-17 4 views
3

У меня есть директива:.запросов для просмотра переменных внутри директив не работает

@Directive({ 
    selector: '[myDirective]' 
}) 

export class MyDirective implements AfterViewInit { 
    @ViewChild('wrapper') wrapper; 
    @ViewChild('list') list; 

    ngAfterViewInit() { 

    // Both of these are undefined 
    console.log(wrapper, list); 
    } 
} 

Что нужно для запроса переменных в представлении, что он используется в

Так что у меня есть этот шаблон в один из моих компонентов, MyComponent:

<div #wrapper myDirective> 
    <ul #list></ul> 
</div> 

необходимо найти эти переменные, но директива никогда не удается сделать это так, как я сейчас. Мое предположение о том, почему это происходит, состоит в том, что, поскольку директива фактически не имеет представления, ngAfterViewInit работает слишком рано и/или @ViewChild пытается найти wrapper и list в неположенном месте.

Как я могу убедиться, что директива может найти переменные?

+0

Включили ли вы его в 'declarations' для вашего модуля? Какие (если есть) сообщения вы получаете в консоли? – jonrsharpe

ответ

2

Просто измените ViewChild на ContentChild. Я полагаю, он должен работать

export class MyDirective implements AfterViewInit { 
    @ContentChild('wrapper') wrapper; 
    @ContentChild('list') list; 

    ngAfterContentInit() { 
    console.log(this.wrapper, this.list); 
    } 
} 

Plunker Example

+0

Не знал, что они работают над директивами. –

+1

@ GünterZöchbauer Меня тоже нет, но, видимо, они это делают. – Chrillewoodz