gpt4 book ai didi

结构指令中的 Angular 输入绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 19:44:29 26 4
gpt4 key购买 nike

我找不到在结构指令中绑定(bind)多个输入的方法:

查看

   <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

最佳答案

指令的输入遵循命名约定,如下所示:

Directive input name = directiveSelector + identifier (first character capital)

因此,为了创建 requiredArequiredB 作为输入,您需要有 requiredAccessRightRequiredArequiredAccessRightRequiredB

在使用指令时创建这些输入后,您始终需要传递一个值作为指令名称值。

例如在 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 模板中的用法

由于第一个值是强制性的,您可以从组件传递您的值来代替 ''[],我在这里只是使用占位符。

<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>

关于结构指令中的 Angular 输入绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59577755/

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