Angular CanDeactivate无法正常工作

库希克·拉武拉佩利

我正在尝试CanDeactivate在路由中使用该函数,但canDeactivate从未在其他路由上调用函数

CanDeactivateGuard:

import { Injectable } from '@angular/core';
import { CanDeactivate } from '@angular/router';
import { Observable } from 'rxjs/Observable';

export interface CanComponentDeactivate {
  canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}

@Injectable()
export class CanDeactivateGuard implements  CanDeactivate<CanComponentDeactivate>{

  canDeactivate(component: CanComponentDeactivate) {
    return component.canDeactivate ? component.canDeactivate() : true;
  }
}

CatalogViewComponent:

import { Component } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from "rxjs";
import {CanComponentDeactivate} from '../../can-deactivate.guard';
@Component({
  selector: 'home',
  template: `
    <h1>Catalog</h1>
  `,
})
export class CatalogViewComponent implements CanComponentDeactivate{
  canDeactivate(): Observable<boolean> | boolean {
    console.log('working');  // Not Entering this function when invoked another route
    return false;
  }
}

routing.module.ts:

 { path: 'catalog', component: CatalogViewComponent, canDeactivate: CanDeactivateGuard },

Stackblitz链接

金·克恩

您需要将防护作为数组传递。(您可以有多个。)

{ path: 'catalog', component: CatalogViewComponent, canDeactivate: [CanDeactivateGuard] }

并将防护添加为provider

providers: [CanDeactivateGuard],

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章