首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角CanDeactivate不工作

角CanDeactivate不工作
EN

Stack Overflow用户
提问于 2018-08-01 21:55:50
回答 1查看 6.9K关注 0票数 7

我试图在路由中使用CanDeactivate函数,但是在另一条路由上调用canDeactivate函数时从未调用过。

CanDeactivateGuard :

代码语言:javascript
复制
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 :

代码语言:javascript
复制
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 :

代码语言:javascript
复制
 { path: 'catalog', component: CatalogViewComponent, canDeactivate: CanDeactivateGuard },

Stackblitz链路

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 22:05:02

你需要把警卫当成数组。(你可以有不止一个。)

代码语言:javascript
复制
{ path: 'catalog', component: CatalogViewComponent, canDeactivate: [CanDeactivateGuard] }

并将保护添加为provider

代码语言:javascript
复制
providers: [CanDeactivateGuard],
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51642802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档