angular - 结构指令中的角度输入绑定
问题描述
我找不到在结构指令中绑定多个输入的方法:
看法
<div *requiredAccessRight requiredA="[EnumA.A]" requiredB="[EnumB.A]">
指示
@Directive({
// tslint:disable-next-line: directive-selector
selector: '[requiredAccessRight]',
})
export class RequiredAccessRightDirective implements OnInit {
@Input() requiredA: EnumA[];
@Input() requiredB: EnumB[];
...
}
在ngOnInit()
两者都Inputs()
将结束undefined
解决方案
指令的输入遵循如下命名约定:
指令输入名称 = 指令选择器 + 标识符(首字母大写)
因此,为了创建requiredA
和requiredB
作为输入,您需要拥有requiredAccessRightRequiredA
和requiredAccessRightRequiredB
。
在使用指令时创建这些输入后,您始终需要传递一个值作为指令名称值。
例如,在requiredAccessRight
指令中,您必须将requiredAccessRight
其作为输入(这是强制性的)。
使用指令时,第一个值将始终没有任何 iedntifier,它将分配给指令名称值。之后,通过;
用作分隔符,您可以传递其他自定义输入。
指示
import { Directive, TemplateRef, ViewContainerRef, Input } from '@angular/core';
@Directive({
selector: '[requiredAccessRight]'
})
export class DirectiveDirective {
private _requiredAccessRight: any;
private _requiredAccessRightRequiredA: any;
private _requiredAccessRightRequiredB: any;
@Input() set requiredAccessRight(value: any[]) {
this._requiredAccessRight = value;
console.log(this._requiredAccessRight)
}
@Input() set requiredAccessRightRequiredA(enumA) {
this._requiredAccessRightRequiredA = enumA;
console.log(this._requiredAccessRightRequiredA);
}
@Input() set requiredAccessRightRequiredB(enumB) {
this._requiredAccessRightRequiredB = enumB;
console.log(this._requiredAccessRightRequiredB);
}
constructor(private templateRef: TemplateRef<any>, private vcr: ViewContainerRef) { }
}
HTML 模板中的用法
由于第一个值是强制性的,您可以从组件传递您的值来代替''
or []
,我只是在这里使用占位符。
<button *requiredAccessRight="'';requiredA: [enumA]; requiredB: [enumB]">click</button>
<!-- or -->
<button *requiredAccessRight="[];requiredA: [enumA]; requiredB: [enumB]">click</button>
<!-- or -->
<button *requiredAccessRight="let i;requiredA: [enumA]; requiredB: [enumB]">click</button>
推荐阅读
- django - 如何将文本或二进制文件写入 Django 响应?
- python - 第 46 行文件 main.py 中以 '\xe4' 开头的非 UTF-8 代码,但未声明编码
- python - 以设定的频率随机替换值
- python - 向量化最大距离函数
- sql - MS Access 中交叉表列的动态减法
- docker - 有没有办法代理 docker 容器的 webUI 并需要密码?
- sql - Oracle Apex,尝试根据时间在 Checkbox 中选择值
- typescript - Typescript Infer 多个错误子类的返回值
- azure - 将 Azure 存储中的文件移动到共享网络目录
- postgresql - 如何在不停机的情况下更新 PostgreSQL 数据库?