Typescript:在循环外部访问变量

时间:2018-01-25 08:07:49

标签: javascript angular typescript frontend

我创建了一个数组,想要访问循环外部创建的元素。我知道他们不在范围内并写下这个。它的前面也不会使它们可以访问。

colIdx = colIdx + this.columns.findIndex(c => c.editable);
this.focusInput(rowIdx, colIdx);
this.autocompletes.toArray().forEach(el => {
   console.log(el);
})

我有一个包含许多输入字段的表,其中包含自动完成功能和建议面板。我还有一个自定义方法,它允许用户使用回车键选项卡。然而,首先,使用输入标签并没有关闭自动完成的建议面板,因此一段时间后所有的建议面板都打开了。

这就是为什么我创建了上面的方法。你实际上可以忽略前两行,因为使用enter键表需要它们。

this.autocompletes 是一个包含所有输入元素的Querylist。我已将它们变成一个数组,并将每个元素称为 el 。 这样我就可以在 el 上调用 closePanel()方法,以便关闭自动完成方法的建议面板。但是这样做会关闭ALL el元素的建议面板。这就是为什么我需要用户设置的el索引并关闭这个索引。

为了做到这一点,我必须在创建的for循环之外访问 el

3 个答案:

答案 0 :(得分:1)

您可以在循环外部初始化一个空数组,如var arr: type = emptyArr[];,然后从循环内部推送数据(el)。

从循环内部执行类似:arr.push(el)的操作,然后在循环外部访问它。

答案 1 :(得分:0)

最简单的方法是将它们分配给循环范围之外的数组:

elements: any[] = [];
colIdx = colIdx + this.columns.findIndex(c => c.editable);
this.focusInput(rowIdx, colIdx);
this.autocompletes.toArray().forEach(el => {
    console.log(el);
    this.elements.push(el);
});

// You can now loop over `this.elements` and do what you need with them.

答案 2 :(得分:0)

  

this.autocompletes是一个包含所有输入元素的Querylist

这意味着自动填充不会改变,您可以将它在Init调用中保存到局部变量中。

例如:如果您的表单有4个输入,它将仍然包含4,除非您从dom中删除它。在create / init期间将其保存在本地变量中。取决于你如何编写代码。

这是你可以做的。

//do not do .toArray again and again its just not usefull as your data is constant
elements: Array<any> = this.autocompletes.toArray();

...

elements.forEach(el => {
   //work on elements here
   //to check focus on el you could do something like this el.is(":focus")
});