gpt4 book ai didi

javascript - 在 Angular 7 中使用 ng-content 动态隐藏 child

转载 作者:行者123 更新时间:2023-11-30 19:48:22 25 4
gpt4 key购买 nike

在我的项目中有一个场景,其中必须根据为特定登录用户提供的 Angular 色权限隐藏内容。

所以我们做了一个名为<app-authorise>的全局组件它将根据用户拥有的权限启用子项。

Component.ts

import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
import { GlobalService } from '../../../core/global/global.service';

@Component({
selector: 'app-authorise',
templateUrl: './app-authorise.component.html',
styleUrls: ['./app-authorise.component.scss'],
changeDetection: ChangeDetectionStrategy.Default
})
export class AuthoriseComponent {
@Input() public module: string;
@Input() public permission: string;
@Input() public field: string;
@Input() public role: string;

public currentUser: any = {};
public currentUserRoles = [];
constructor(private globalService: GlobalService) {
this.globalService.subscribeToUserSource((updatedUser: any) => {
this.currentUser = updatedUser;
this.currentUserRoles = updatedUser.rolePermissions;
});
}

get enable() {
const {
currentUser,
currentUserRoles,
module,
permission,
role
} = this;
if (currentUser && currentUserRoles) {
return role ? this.hasRole(currentUserRoles, role) :
this.globalService.hasPermissionForModule({
currentUserRoles,
module,
permission,
});
}
return false;
}

public hasRole(currentUserRoles: any, role: string) {
return Boolean(currentUserRoles[role]);
}
}

Component.html

<ng-container>
<ng-content *ngIf="enable"></ng-content>
</ng-container>

用例

<app-authorise [module]="properties.modules.project" [permission]="properties.permissions.CREATE">
<app-psm-list></app-psm-list>
</app-authorise>

我们面临的实际问题是子组件的 onInit() 方法被调用,即使在父组件内启用了子组件也是如此。

任何想法,对此的建议都将非常有帮助。

最佳答案

您可以在投影前检查条件<app-psm-list>组件进入 <app-authorise> ,所以 app-psm-list组件 ngOnInit()如果条件失败,则不会调用。

为此,您需要一些引用,例如 #authorise反对app-authorise组件

<app-authorise #authorise [module]="properties.modules.project" [permission]="properties.permissions.CREATE">
<ng-conatiner *ngIf="authorise.enable">
<app-psm-list></app-psm-list>
</ng-conatiner>
</app-authorise>

app-authorise 中不需要条件再次

应用授权

<ng-container>
<ng-content></ng-content>
</ng-container>

DEMO

关于javascript - 在 Angular 7 中使用 ng-content 动态隐藏 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54731009/

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