Angular 是否有中断(停止)组件生命周期的选项

Angular 是否有中断(停止)组件生命周期的选项,angular,Angular,我正在angular应用程序中进行RBAC实现。我想中断(停止)组件生命周期和组件模板(以及子组件/模板)的呈现。如果用户没有授权。 我已经创建了用于管理UI行为的指令,但我也想停止.ts代码的执行。 我是否有任何选项,或者可以从父组件限制或覆盖子组件生命周期 我正在实现授权,希望在加载组件之前检查用户详细信息,以避免执行typescript代码。我已尝试使用基本服务来检查和限制它。Angular提供在加载组件之前执行此类检查 按如下所示创建Guard: export class AccessG

我正在angular应用程序中进行RBAC实现。我想中断(停止)组件生命周期和组件模板(以及子组件/模板)的呈现。如果用户没有授权。 我已经创建了用于管理UI行为的指令,但我也想停止.ts代码的执行。 我是否有任何选项,或者可以从父组件限制或覆盖子组件生命周期


我正在实现授权,希望在加载组件之前检查用户详细信息,以避免执行typescript代码。我已尝试使用基本服务来检查和限制它。

Angular提供在加载组件之前执行此类检查

按如下所示创建Guard:

export class AccessGuard implements CanActivate {

    constructor() { }
    canActivate(
        route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot
    ): Observable<boolean> | Promise<boolean> | boolean {
        // Check if user is entitled, then return true otherwise return false.
    }
}

HTH.

请创建类似demo.resolver.ts的解析器

import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';  
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';

 @Injectable()
 export class DemoResolver implements Resolve<Observable<string>> {
 constructor() {}
 resolve() {
     return Observable.of('Hello Alligator!').delay(2000);
    }
 }


//Routes
import { DemoResolver } from './demo.resolver';
{
  path: 'top',
  component: TopComponent,
  resolve: { message: DemoResolver }
}
从'@angular/core'导入{Injectable};
从'@angular/router'导入{Resolve};
从“rxjs/Observable”导入{Observable};
导入“rxjs/add/observable/of”;
导入“rxjs/add/operator/delay”;
@可注射()
导出类DemoResolver实现解析{
构造函数(){}
解决(){
返回可观察到的('Hello Alligator!')。延迟(2000);
}
}
//路线
从“./demo.resolver”导入{DemoResolver};
{
路径:“顶部”,
组件:TopComponent,
解析:{消息:DemoResolver}
}
因此,您可以在加载组件之前获取数据并检查条件
在解析器中,您可以调用API或任何您想要的东西。这将对您有所帮助。

我同意路线警卫的意见,但这将有助于保护整个路线。我们希望将用户限制在单个子组件级别,这意味着用户可能有权访问路由,但无权查看/编辑路由的特定子组件。我们将在单独的服务中维护授权详细信息。

“我正在实施授权,并希望在加载组件之前检查用户详细信息”-我将使用路由器和路由防护装置进行检查。我同意路由防护装置,但这将有助于保护完整的路由。我们希望将用户限制在单个子组件级别,这意味着用户可能有权访问路由,但无权查看/编辑路由的特定子组件。我们在单独的服务中维护授权详细信息。
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';  
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';

 @Injectable()
 export class DemoResolver implements Resolve<Observable<string>> {
 constructor() {}
 resolve() {
     return Observable.of('Hello Alligator!').delay(2000);
    }
 }


//Routes
import { DemoResolver } from './demo.resolver';
{
  path: 'top',
  component: TopComponent,
  resolve: { message: DemoResolver }
}