angular - 如何操作 Angular 属性指令以响应应用程序行为
问题描述
最近我遇到了一种情况,比如我应该根据应用程序的状态显示和隐藏 DOM 元素。假设应用程序的状态是Admin view和employee view。我创建了一个下拉菜单来切换应用程序的视图。
<option (click)="enableAdminView()">Admin View <option/>
<option (click)="enableEmployeeView()">Employee View <option/>
单击 dropdwon 后,我已向 RXjs 主题注册了一个事件,然后我的自定义指令可以订阅这些事件。根据我需要显示和隐藏 Dom 元素的事件。
客户指令.ts
@Directive({
selector: '[myApplicationView]'
})
export class ApplicationViewDirective {
this.applicationView = 'Employee' ;
constructor(private templateRef: TemplateRef<any>,
private viewContainer: ViewContainerRef) {
//Subscribe to ApplicationViewService
ApplicationViewService.APPLICATION_VIEW_SUBJECT.subscribe((view) => {
this.applicationView = view; // view can be Admin or Employee
this.renderDomElements(view)
});
}
@Input() set myApplicationView(view: string) {
this.renderDomElements(view);
}
renderDomElements(view: any) {
if(view === 'Employee'){
this.viewContainer.createEmbeddedView(this.templateRef);
} else if (view == Admin) {
this.viewContainer.createEmbeddedView(this.templateRef);
}else{
this.viewContainer.clear();
}
}
}
HTML 导航菜单代码片段
<div *myApplicationView="'Admin'">
... // display admin related actions
</div>
<div *myApplicationView="'Employee'">
... // display employee related actions
</div>
这里的问题是在指令的订阅者函数中调用this.renderDomElements(view)函数时,我无法访问主机指令的 @input 值。我尝试调用this.templateRef.elementRef.nativeElement来获取主机指令值,但它已被注释,因此无法访问指令输入值。那么初始化后有什么方法可以访问指令的输入值?
解决方案
推荐阅读
- python - 从 html 中的 python (bokeh) 中删除列标题
- c++ - Arduino Pin 4 connected to keypad alsways HIGH resulting in not working keypad
- sql - 具有不同架构的 Oracle Text ctx_ddl.sync_index
- python - 计数器不更新值
- python - R renv vs Python 虚拟环境 vs Julia 环境
- python - 季度差异
- vue.js - 在 VUE 中使用 localStorage 的最简洁方式
- python - LSTM 通过将分类数据作为输入来预测数值数据
- json - Ansible 将 JSON 转换为字典
- jquery - 如果我使用 Replace 和 RegExp,如何恢复到原始颜色?