gpt4 book ai didi

Angular CanDeactivate 不起作用

转载 作者:太空狗 更新时间:2023-10-29 17:51:12 28 4
gpt4 key购买 nike

我正在尝试在路由中使用 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;
}
}

目录 View 组件:

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;
}
}

路由.module.ts :

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

Stackblitz Link

最佳答案

您需要将守卫作为数组传递。 (你可以有不止一个。)

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

同时将守卫添加为 provider:

providers: [CanDeactivateGuard],

关于Angular CanDeactivate 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642802/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com