mdDialog の場合、変数を渡すにはどうすればよいですか?具体的には、Angularサービスをダイアログコンポーネントに挿入する方法は?
変数を渡すには、ダイアログで開かれたコンポーネントのインスタンスを、MdDialog.open()メソッド呼び出しで返されたMdDialogRefインスタンスから取得できます。
dialogRef = this.dialog.open(PizzaDialog, config)
dialogRef.componentInstance.<property_name>
github material2 docs からの変更されたピザ
@Component({
selector: 'pizza-component',
template: `
<button type="button" (click)="openDialog()">Open dialog</button>
`
})
export class PizzaComponent {
constructor(public dialog: MdDialog) { }
openDialog() {
let config = new MdDialogConfig();
let dialogRef:MdDialogRef<PizzaDialog> = this.dialog.open(PizzaDialog, config);
dialogRef.componentInstance.name = "Ham and Pineapple";
dialogRef.componentInstance.size = "Large";
}
}
@Component({
selector: 'pizza-dialog',
template: `
<h2>{{name}}</h2>
<p>Size: {{size}}</p>
<button type="button" (click)="dialogRef.close('yes')">Yes</button>
<button type="button" (click)="dialogRef.close('no')">No</button>
`
})
export class PizzaDialog {
name:string;
size:string;
constructor(public dialogRef: MdDialogRef<PizzaDialog>) { }
}
Material2 beta.2
dialog.open()
関数は、2番目のパラメーターconfig
( MdDialogConfig )を取ります。ここで、任意のdata
オブジェクトを指定できます。
this.dialog.open(YourComponent, {
data: {
anyProperty: "myValue"
}
});
その後、ダイアログウィンドウに使用されているコンポーネントからこのオブジェクトを取得するだけです。
export class YourDialogComponent {
constructor(public dialogRef: MdDialogRef<YourComponent>) {
console.log('data', this.dialogRef.config.data);
}
}
更新:beta.3
上記の答えは、Material_2の2.0.0-beta.2
バージョンで機能します。 2.0.0-beta.3
を使用している場合、config
プロパティはMdDialogRef
から削除されました。代わりに、開いているコンポーネントのMD_DIALOG_DATA
を使用してその値を注入できます。
新しいインポート文
import {MdDialog, MdDialogRef, MdDialogConfig, MD_DIALOG_DATA} from '@angular/material';
ダイアログを開く
this.dialog.open(YourComponent, {
data: {
anyProperty: "myValue"
}
});
DialogRef
コンポーネントからデータを取得
export class YourDialogComponent {
constructor(
public dialogRef: MdDialogRef<YourDialogComponent>,
@Inject(MD_DIALOG_DATA) public data: any) {
console.log('data', this.data);
}
}
https://material.angular.io/components/dialog/overview にある公式ドキュメントから
Dialogコンポーネントでデータを共有します。
ダイアログとデータを共有する場合は、データオプションを使用して、ダイアログコンポーネントに情報を渡すことができます。
let dialogRef = dialog.open(YourDialog, {
data: 'your data',
});
ダイアログコンポーネントのデータにアクセスするには、MD_DIALOG_DATAインジェクショントークンを使用する必要があります。
import {Component, Inject} from '@angular/core';
import {MD_DIALOG_DATA} from '@angular/material';
@Component({
selector: 'your-dialog',
template: 'passed in {{ data }}',
})
export class YourDialog {
constructor(@Inject(MD_DIALOG_DATA) public data: any) { }
}
ここに私がそれをした方法があります。
pizza.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class PizzaService {
getTopping(): string {
return "Mushrooms"
}
}
pizzaDialog.component.ts
import { Component } from '@angular/core';
import { MdDialogRef} from '@angular/material';
import {PizzaService} from './pizza.service';
@Component({
selector: 'pizza-dialog',
template: `{{pizzaTopping}}
<button type="button" (click)="dialogRef.close('yes')">Yes</button>
<button type="button" (click)="dialogRef.close('no')">No</button>
`,
providers: [PizzaService]
})
export class PizzaDialog {
pizzaTopping: string;
constructor(public dialogRef: MdDialogRef<PizzaDialog>, private pizzaService: PizzaService) { };
ngOnInit(): void {
this.pizzaTopping = this.pizzaService.getTopping()
}
}
「Md」から「Mat」への更新に対応するために更新された回答を提供するには:
データを含むダイアログを開くには、データオブジェクトを渡します。
this.dialog.open(YourComponent, {
data: {
anyProperty: "myValue"
}
});
ダイアログでそのデータを取得するには:
import { Component, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
export class YourDialogComponent {
constructor(
public dialogRef: MatDialogRef<YourDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: any) {
console.log('data passed in is:', this.data);
}
}