我正在尝试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 },
您需要将防护作为数组传递。(您可以有多个。)
{ path: 'catalog', component: CatalogViewComponent, canDeactivate: [CanDeactivateGuard] }
并将防护添加为provider
:
providers: [CanDeactivateGuard],
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句