简体   繁体   中英

angular 4 component target by selector

I'm developing a message system, based on toaster notifications:

http://jasonwatmore.com/post/2017/06/25/angular-2-4-alert-toaster-notifications

My question is simple, I want to extend the functionality to allow multiple alert components that can be targeted individually within different templates.

For example, the root app.component.html template would have:

<alert root></alert>

A sub component would have:

<alert subcomponent></alert>

The current implementation of the toaster tutorial (component) will target any instance of the alert component within a template.

If there were two, they would both get the same message when the service is invoked.

Ideally, I want to add another parameter onto the service call:

this.alertService.success(message,target);

you can use an string input attribute in the alert directive component called target.

and when the alert.service trigger an alert the component only shows if the target match:

alert.component.ts

// add this input
@Input() target: string;

ngOnInit() {
    this.alertService.getAlert().subscribe((alert: Alert) => {
        // add this statament
        if (alert.target === this.target) {
            this.alerts.push(alert); 
        }
    });
}

alert.service.ts

/*each alert function recive an extra parameter for target, if you needed with a default value, "root" for example*/

root.component.html

<alert target='root'></alert>

other.component.ts

// calling an alert
this.alertService.success(
    message='operation success', 
    target='root'
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM