Hi I using angular 8 with ng-bootstrap to add table in my project
I find this code that I didn't understand very well
@Directive({
selector: 'th[sortable]',
host: {
'[class.asc]': 'direction === "asc"',
'[class.desc]': 'direction === "desc"',
'(click)': 'rotate()'
}
})
can anyone tell me what the code say?
and what "th" mean in selector.
also host can i change it to something else because the editor say that, is it Old property or what
Thanks to all
As per Angular documentation:
selector
selector: The CSS selector that identifies this directive in a template and triggers instantiation of the directive.
So in your code selector: 'th[sortable]' selector declares select by th element name with [sortable] attribute. You should find something like <th sortable>... in your html file.
UPDATE to answer the comment:
As per link shared in comment, here is the th sortable in html code:

host
host: Maps class properties to host element bindings for properties, attributes, and events, using a set of key-value pairs.
host: {
[key: string]: string;
}
It's preferable to use @HostBinding and @HostListener instead of host by angular style guide, check this link for more details.
To replace host in your code:
@HostBinding allows you to set properties on the element or component that hosts the directive. So it will replace your [class.asc] and [class.desc] code with the following inside your directive:
@HostBinding('class.asc') direction = 'asc';
@HostBinding('class.desc') direction = 'desc';
@HostListener allows you to listen for events on the host element or component. So your '(click)' code will be replaced with the following inside your directive:
@HostListener('click') rotate() {
// todo:
}
Firstly, you should understand what's the difference between a directive and a component.
Unlike components, directives do not require a view. They should be responsible for rendering logic: adding/removing elements and/or adding custom behavior to DOM elements or components.
th[sortable] - think of it as a normal CSS selector. This would be translated into: A th element with a sortable attribute: <th sortable></th>.
If the selector was comma-separated(th,[sortable]) it would mean that you either use your directive as th or <any-comp sortable></any-comp> or <th sortable></th>.
The host property, as mentioned in the documentation
Maps class properties to host element bindings for properties, attributes, and events, using a set of key-value pairs.
where the host element is the element/component you have attached your directive to.
However, you can achieve the same results by using HostBinding and HostListener.
With this in mind, you code could look like this:
@Directive({ ... })
export class YourAwesomeDirective {
@HostBinding('class.asc')
get ascClass () {
return this.direction === 'asc';
}
@HostBinding('class.desc')
get descClass () {
return this.direction === 'desc';
}
@HostListener('click', '[$event]')
onClick (ev) { /* ... */ }
}
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