javascript - 无法抓住执行填充 Angular 4 中数组的函数的好时机
问题描述
我正在研究一些模式,有“规则”部分。你可以在那里设置你想要的规则。
还有那个“添加规则”按钮,您可以单击该按钮并获取新的“要设置的规则”。
现在你有了“规则运算符”,它们是按钮:“OR”、“AND”和“EXCLUDE”:
根据您在规则下拉选项中选择的“按钮”将有所不同/更改。
这就是为什么我需要为每个规则为该下拉列表提供一个数组“副本”的原因。
如果您在规则 2 中选择 -> 下拉菜单中的“或”运算符,则将是不同的选项。问题在于数组在同一个内存中,并且在规则 1 的下拉列表中也进行了更改。
为了避免这种情况,我想让每个规则都有自己的数组副本。
该规则部分是由 for 循环创建的,每次单击“添加规则”时,rules.array 将增加一个,并且我们将在那里“呈现新规则”。
“规则”数组的初始值为 1。当您单击“添加规则”时,将有 2。
我使用该数组遍历她,并为每次迭代创建新的“数组索引”。这意味着如果我们有 2 条规则,我们将有一个带有两个索引(数组)的数组。
主要问题出在 Typescript 中:在 updateAudienceRulesList() 函数中,当您单击“新规则”时,因为 this.audienceDto.rules.length 为空。一开始,该数组的值为 1,默认情况下,您有一个规则。
@Input() audienceDto: AudienceDtoData;
@Input() parentForm: NgForm;
public ruleOperatorArray = RULE_OPERATOR_ARRAY;
public audienceRulesTypesList = [];
constructor() {
}
ngOnInit() {
this.updateAudienceRulesList();
}
updateAudienceRulesList() {
for (let i = 0; i < this.audienceDto.rules.length; i++) {
console.log(i);
this.audienceRulesTypesList[i] = RULE_ARRAY;
}
}
onSelectRuleOperator(ruleOperator, value, i) {
ruleOperator = value;
this.audienceRulesTypesList[i] = ruleOperator === 'OR' ? RULE_ARRAY_WITHOUT_GEO_RULES : RULE_ARRAY;
}
这是 rules.component 的 HTML:
<div *ngFor="let rule of audienceDto.rules; let i = index"
class="nano-f-r nano-rule-wrapper">
<hr>
<div class="nano-label">
<span class="nano-m-05">
Rule {{ i + 1 }}
</span>
</div>
<div class="nano-f-c nano-f">
<div *ngIf="i > 0"
class="nano-f-r nano-f-30" style="margin-bottom: 5px;">
<label *ngFor="let ruleOperator of ruleOperatorArray"
[class.active]="rule.ruleOperator === ruleOperator.value"
(click)="rule.ruleOperator = ruleOperator.value"
(click)="onSelectRuleOperator(rule.ruleOperator, ruleOperator.value, i)"
class="nano-radio-button">
<span>
{{ ruleOperator.name }}
</span>
</label>
</div>
<div class="nano-f-r nano-f-30">
<nano-drop-down [arrayOfOptions]="audienceRulesTypesList[i]"
[selectedOptions]="rule.ruleClass"
(selectedOptionsChange)="rule.onRuleChange($event)">
</nano-drop-down>
<div (click)="audienceDto.removeRule(i)"
class="nano-f-r nano-f-30 nano-bc-ws hover-effect nano-c-p nano-ml-2">
<i class="fa fa-times nano-m-a"></i>
</div>
</div>
解决方案
推荐阅读
- symmetricds - SymmetricDS:保持单独的自动增量计数器
- sql - 错误(6,87):PLS-00103:在预期以下/复合触发器之一时遇到符号“JOIN”
- docker - apt-get update 签名验证出错
- c# - 在它所在的表单被关闭和处理之后执行的代码
- spring-boot - 为什么程序在通过 Soap 服务进行调用时返回无法识别的回调
- java - 不明白为什么 onErrorResponse 是“出了点问题”
- javascript - Outlook AddIn GetAsync 成功但不返回任何内容
- python - 如何正则表达式替换其中替换是搜索关键字/标签的功能
- javascript - 如何按照这种模式将 Javascript 对象的所有函数复制到不同的函数?
- c# - 如何在 C# 中使用 drawString 更新日期