首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CanDeactivate防护无法访问它所防护的组件的函数

CanDeactivate防护无法访问它所防护的组件的函数
EN

Stack Overflow用户
提问于 2016-09-09 23:52:18
回答 1查看 2.7K关注 0票数 1

我正在尝试使用angular2中的CanActivate保护来要求用户保存更改。我使用的是angular RC4

Boot.ts

代码语言:javascript
复制
bootstrap(App, [
...HTTP_PROVIDERS,
StorageService,
PortfolioNavigationGuard,
other...

Routes.ts

代码语言:javascript
复制
export const PortfolioRoutes: RouterConfig = [
{ path: 'portfolios', component: 'PortfolioListComponent' },
{ path: 'portfolios/:id', component: 'PortfolioModelComponent', canDeactivate: [PortfolioNavigationGuard] },
{ path: 'portfolios/:id/:action', component: 'PortfolioModelComponent', canDeactivate: [PortfolioNavigationGuard]  }

守卫

代码语言:javascript
复制
@Injectable()

export class PortfolioNavigationGuard implements CanDeactivate<PortfolioDetailComponent> {

代码语言:javascript
复制
constructor(private router: Router) { }

canDeactivate(component: PortfolioDetailComponent) {

    component.canDeactivate();
    component.anyfunction() --- anyfunction is not a function

    return true;
}

错误

代码语言:javascript
复制
EXCEPTION: Error: Uncaught (in promise): TypeError: component.canDeactivate is not a function

组件

代码语言:javascript
复制
export class PortfolioDetailComponent {
canDeactivate() {
    console.log("WOW");
}

为什么我不能在我的卫士内部调用组件上的任何函数?

EN

回答 1

Stack Overflow用户

发布于 2016-09-10 01:00:34

我做了一些修改:

将防护实现切换到不同的组件(与我在路由配置中定义的组件相同):

代码语言:javascript
复制
export class PortfolioNavigationGuard implements CanDeactivate<PortfolioDetailComponent> {

代码语言:javascript
复制
export class PortfolioNavigationGuard implements CanDeactivate<PortfolioModelComponent> {

有两件事需要注意。第一个组件不是通过路由器出口加载的,而第二个组件是。我在想,属于另一个的组件(用作模板中的标签)仍然可以访问路由数据(您可以订阅路由id更改,比方说,在使用选择器而不是路由器插座带来的组件中),但是似乎对于守卫来说,您要保护的组件必须通过路由器插座带来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39415412

复制
相关文章

相似问题

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