What should I do if I want to get a reference to all elements projected in my Component?
Let's say I have AppComponent which projects some links and images into TestComponent:
@Component({
selector: 'test',
template: '<ng-content></ng-content>'
})
class TestComponent {}
@Component({
selector: 'app',
template: `
<test>
<img src="http://example.org/1.jpg">
<a href="http://example.org">Some Link</a>
</test>
`,
directives: [ TestComponent ]
})
export class AppComponent {}
Now how can I get a reference to those links and images (and potentially other element types) inside my TestComponent ?
Reading this post suggests the following:
Solution: ContentChildren + directive with li selector
One great solution is to take advantage of the selector in the @Directive decorator. You simply define a directive that selects for <li> elements, then use a @ContentChildren query to filter all <li> elements down to only those that are content children of the component.
But this only works if I want to get a single element type, but if I want to get more than one type that means I have to create a directive for each type I want (and what if I want all types?)...this doesn't feel like a practical method.
Is there another way? or is direct DOM manipulation the only solution in this case?
You can try using multiple selectors on the directive like this:
@Directive({ selector: 'a, img' })
Angular only allows directives to trigger on CSS selectors that do not cross element boundaries. So selector may be declared as one of the following:
element-name: select by element name..class: select by class name.[attribute]: select by attribute name.[attribute=value]: select by attribute name and value.:not(sub_selector): select only if the element does not match the sub_selector.selector1, selector2: select if either selector1 or selector2 matches.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With