Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度4。基于if删除构造函数中的组件_Javascript_Angular - Fatal编程技术网

Javascript 角度4。基于if删除构造函数中的组件

Javascript 角度4。基于if删除构造函数中的组件,javascript,angular,Javascript,Angular,我想为组件添加保护。 如果用户没有查看此组件的权限,则不会呈现该组件 我尝试将我的if放入构造函数并返回false,但它仍然呈现 我还向模板本身添加了if,但是我没有看到视图,但是组件仍然处于活动状态,这增加了代码的复杂性,因为我需要维护同一if的多个位置 有没有办法告诉组件根本不要渲染 构造函数(私有用户服务:用户服务){ if(this.userService.isAllowed(“see\u trade\u groups”)==false){ 返回; } }为此,您可以看到。把它放在组件

我想为组件添加保护。 如果用户没有查看此组件的权限,则不会呈现该组件

我尝试将我的
if
放入构造函数并返回
false
,但它仍然呈现

我还向模板本身添加了
if
,但是我没有看到视图,但是组件仍然处于活动状态,这增加了代码的复杂性,因为我需要维护同一
if
的多个位置

有没有办法告诉组件根本不要渲染

构造函数(私有用户服务:用户服务){
if(this.userService.isAllowed(“see\u trade\u groups”)==false){
返回;
}

}
为此,您可以看到。把它放在组件
路径上
,它就能完成你想要的工作


您可以编写一个逻辑,根据该逻辑来导航路由或不导航。

组件编译生命周期由Angular compiler处理,因此组件无法控制自己的生命周期,应该从外部对其进行控制

处理这个问题的一个常用方法是使用路由器。路由组件中的生命周期不同于常规组件,因为它由路由器处理;它们连接到
组件。可以在常规组件中使用,但不能在常规组件中使用

否则,应使用指令处理此问题
ngIf
是防止编译常规组件的内置方式

所以它变成了

<foo *ngIf="userService.isAllowed('see_trade_groups')"></foo>
它的用法如下:

<foo *role="'see_trade_groups'"></foo>


请注意,
Role
*
结构指令。这允许它控制它所指定的元素的编译,类似于
ngIf
ngFor
的做法。

我需要基于组件而不是基于路由的组件,因为我可以在同一路由上有许多组件。您有许多组件,并且希望根据条件显示和隐藏一些组件?如果我放置ngIf,它可以工作,但组件仍然执行api调用,因为只有模板没有呈现. 然后我需要在所有组件挂钩上添加if。我想避免的事情是,ngIf应该在组件周围,而不是内部。如果您的组件仍然进行HTTP调用,要么就是这样,要么是您忘记取消订阅您的Observable。
<foo *role="'see_trade_groups'"></foo>