angular - 避免绑定(bind)中的函数调用

标签 angular

我知道我应该避免在绑定(bind)中调用函数,因为它们在每个更改周期中都会被调用。我有以下问题,我想避免函数调用,但找不到解决方法。

这只是一个简化的例子,但它应该能说明问题:

some-template.html

<ng-container *ngFor="let control of group.Controls">
    <div [ngSwitch]="control.ControlTypeName" >
        <input *ngSwitchCase="'int'" type="text" [formControlName]="getFormControlName(control.PropertyName)">
        ...
    </div>
</ng-container>

一些组件.ts

public getFormControlName(propertyName: string) {
    return this.someArray.find(x => x.key === propertyName).formControlName;
}

问题是我为 [formControlName] 输入所需的属性不在我用 *ngFor 循环的“控制”对象中。该属性位于不同的数组中,我只能通过调用函数找到它。

有没有办法避免这种情况?

最佳答案

为避免这种情况,您应该有一个查找表(哈希表/映射/对象),由数组元素 key 索引,formControlName 为值:

一些组件.ts

some_array = [{key: 'a', formControlName: 'b'}, ...];
control_name = this.some_array.reduce(
                   (obj, el) => ((obj[el.key] = el.formControlName), obj), {});

some-template.html

<input *ngSwitchCase="'int'" [formControlName]="control_name[control.PropertyName]" type="text">

关于angular - 避免绑定(bind)中的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52516817/

相关文章:

html - 如何在 Angular 2 中获得 mat-card-header 背景全色?

forms - 如何设置嵌套 formBuilder 组的值

angular - 如何在 angular-cli 1.0.1 应用程序中使用 chrome-app.d.ts 类型?

javascript - token 刷新后, Angular http拦截器不再调用请求

java - 使用 Spring Security 基于角色的授权

javascript - 如何在 Angular2 中获取(DOM)元素的宽度

forms - 在另一个组件的表单组内创建一个新的表单组,而不是在 Angular 2 中初始化表单的组件中

Angular2-飞镖 : Component Template not loading

javascript - 为什么这个函数没有运行?

angular - 如何读取组件中的http状态代码错误