2017-05-03 13 views
1
import { Component, NgModule } from '@angular/core'; 
import { MdDialog } from '@angular/material'; 
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 
import { Product } from '../../models'; 
import { ProductService } from '../../services/product.service'; 
import { MdDialogRef } from '@angular/material'; 
@Component({ 
    selector: 'product', 
    template: ` 
    <button mdButton class="md-fab md-primary md-hue-2 addProduct" aria-label="Profile" (click)="openDialog()" > 
     add 
    </button> 
    ` 
}) 
export class ProductComponent { 
    constructor(public dialog: MdDialog, public dialogRef: MdDialogRef<AddProductComponent>) { } 
    openDialog() { 
     this.dialogRef = this.dialog.open(AddProductComponent); 
    } 
} 

@Component({ 
    selector: 'addproduct', 
    template: require('./add.product.html'), 
}) 
export class AddProductComponent { 
    constructor(public productService: ProductService, public dialogRef: MdDialogRef<AddProductComponent>) { 
    } 



    addProduct(product: Product) { 
     this.productService.addProduct(product).subscribe(() => { 
      this.dialogRef.close(); 
      //this.productService.getAllProducts(); 
     }); 
    } 
} 

これは私にとって完璧に動作しますが、私はlogincomponentに角度4のmdDialogrefで通常のルーティングを行う方法は?

this.router.navigate(['/product']); 

を使用する場合それは私に

ERRORエラーのエラースロー:(約束で)キャッチされない:エラー:MdDialogRefなしプロバイダーを!

私はstackoverflowの上でこの質問を経る:私はMdDialogRefcomponentInstanceプロパティを使用してみましたが

"No provider for MdDialogRef!"

that tells that we should not use component by <product></product>.But I need to call product component when I get success of login.So How do I do normal routing with mdDialogRef ? 
+0

あなたはこれに対する解決策を見つけましたか? – EffGee

+0

@EffGeeまだ:/あなたが私と共有することがあれば。私に知らせてください。 –

+0

私は何をしました新しいcomponent.tsを作り、他の1つのcomponent.dialog.tsの名前を変更することです。これの大きな欠点は重複したコードですが、私は多分これを継承を使って解決したいと思います。 。ここで私のコードを見ることができます:https://github.com/Rian0702/luncher/tree/master/src/app/order/order-detail – EffGee

答えて

1

。素晴らしいです:

import { Component, NgModule } from '@angular/core'; 
import { MdDialog } from '@angular/material'; 
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 
import { Product } from '../../models'; 
import { ProductService } from '../../services/product.service'; 
import { MdDialogRef } from '@angular/material'; 
@Component({ 
    selector: 'product', 
    template: ` 
    <button mdButton class="md-fab md-primary md-hue-2 addProduct" aria-label="Profile" (click)="openDialog()" > 
     add 
    </button> 
    ` 
}) 
export class ProductComponent { 
    constructor(public dialog: MdDialog) { } 
    openDialog() { 
     let dialogRef = this.dialog.open(AddProductComponent); 

     //Set the dialogRef property of opened dialog with the obtained ref 
     dialogRef.componentInstance.dialogRef = dialogRef; 
    } 
} 

@Component({ 
    selector: 'addproduct', 
    template: require('./add.product.html'), 
}) 
export class AddProductComponent { 
    public dialogRef:<any> = null; 
    constructor(public productService: ProductService) { 
    } 



    addProduct(product: Product) { 
     this.productService.addProduct(product).subscribe(() => { 
      this.dialogRef.close(); 
      //this.productService.getAllProducts(); 
     }); 
    } 
} 
関連する問題