Angular 4路由器和模态对话框

时间:2017-06-16 18:25:27

标签: angular typescript angular4-router

我使用Angular路由器的Angular 4 SPA应用程序。 我想要使​​用Bootstrap 4在新对话框中打开组件的超链接。我已经知道如何从函数中打开模态对话框。

但如何使用超链接打开它?

<a [routerLink]="['/login']">Login</a>

我想留下我当前的组件,只是在它前面显示模态对话框。

另一个问题 - 是否有可能以编程方式执行此操作?所以我可以

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

并在当前组件上显示登录模式对话框?

有什么建议吗?

2 个答案:

答案 0 :(得分:9)

我最好的猜测是你可能想订阅激活的路线并改变路线中的参数以触发模态。

import { ActivatedRoute, Params } from '@angular/router';
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'cmp1',
  templateUrl: './cmp1.component.html',
  styleUrls: ['./cmp1.component.css'],
})
export class Cmp1 implements OnInit {

    constructor(private activatedRoute: ActivatedRoute) {
    }

    ngOnInit() {
        this.activatedRoute.params.subscribe(params => {
            if (params["modal"] == 'true') {
                // Launch Modal here
            }
        });
    }
}

我相信你会有一个看起来像这样的链接:     <a [routerLink]="['/yourroute', {modal: 'true'}]">

可以在此处找到更好的示例:Route Blog

答案 1 :(得分:0)

您也可以使用路径来代替上面的使用查询参数的答案。此处将详细讨论这两个选项:

https://medium.com/ngconf/routing-to-angular-material-dialogs-c3fb7231c177

TL; DR

创建一个虚拟组件,该组件将在创建时打开模式:

@Component({
  template: ''
})
export class LoginEntryComponent {
  constructor(public dialog: MatDialog, private router: Router,
    private route: ActivatedRoute) {
    this.openDialog();
  }
  openDialog(): void {
    const dialogRef = this.dialog.open(LoginComponent);
    dialogRef.afterClosed().subscribe(result => {
      this.router.navigate(['../'], { relativeTo: this.route });
    });
  }
}

然后将虚拟组件添加到您的路线:

RouterModule.forRoot([
{
  path: 'home',
  component: BackgroundComponentForModal,
  children: [
    {
      path: 'dialog',
      component: LoginEntryComponent
    }
  ]
},
{ path: '**', redirectTo: 'home' }

])