順序で材料設計スナックバー複数のメッセージ:角度2/4 - 私は<a href="https://material.angular.io/components/snack-bar/overview" rel="nofollow noreferrer">snackbar</a>表示する「スナックバーサービス」を実施している
snackbar.service.tsが
import { Subscription } from 'rxjs/Subscription';
import { Subject } from 'rxjs/Subject';
import { Inject, Injectable, OnDestroy } from '@angular/core';
import { MatSnackBar, MdSnackBarConfig } from '@angular/material/snack-bar';
import { MdSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar';
export class SnackBarMessage {
message: string;
action: string = null;
config: MdSnackBarConfig = null;
}
@Injectable()
export class SnackBarService implements OnDestroy
{
private messageQueue: Subject<SnackBarMessage> = new Subject<SnackBarMessage>();
private subscription: Subscription;
private snackBarRef: MdSnackBarRef<SimpleSnackBar>;
constructor(public snackBar: MatSnackBar){
this.subscription = this.messageQueue.subscribe(message => {
this.snackBarRef = this.snackBar.open(message.message, message.action, message.config);
});
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
/**
* Add a message
* @param message The message to show in the snackbar.
* @param action The label for the snackbar action.
* @param config Additional configuration options for the snackbar.
*/
add(message: string, action?: string, config?: MdSnackBarConfig): void{
if (!config){
config = new MdSnackBarConfig();
config.duration = 10000;
}
let sbMessage = new SnackBarMessage();
sbMessage.message = message;
sbMessage.action = action;
sbMessage.config = config;
this.messageQueue.next(sbMessage);
}
}
私が欲しいの表示、複数シーケンスのスナックバー:
test.component.ts
import { Component } from '@angular/core';
import { SnackBarService } from 'app/core/services/snackbar.service';
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.scss']
})
export class TestComponent {
constructor(public snackBarService: SnackBarService) {
this.snackBarService.add('A');
this.snackBarService.add('B');
this.snackBarService.add('C');
}
}
しかし、すべてのメッセージは同時に(重複して)表示されます。
snackBarを待つ方法afterDismissed messageQueueに新しいメッセージを表示するにはどうすればよいですか?
おそらく、あなたは 'afterDismissed'メソッドを利用しようとすることができますか? https://material.angular.io/components/snack-bar/api –
@AamirKhanありがとう、私は成功なしで試してみました。私はどのようにメッセージのリストを消費し、前のメッセージを消した後にsnackBarを待っているのかわかりません。 – ar099968