如何在 blur-event 调用时刷新 webelement (Angular 2, Typescript)?
How to refresh webelement on blur-event call (Angular 2, Typescript)?
我正在编写一个带有 html 网站的应用程序,用户在该网站上将 Url 写入文本字段,当离开所述文本字段时,他可以从列表中选择一些内容从 URL.
中提取
提取工作正常,但列表项的 selection 不会更新。
因此,如何在 on-blur 事件调用中 refresh/reload/update 某个网络元素(无论是 div 还是 select)?
进一步说明:
我有一个 html 看起来有点像这样:
<div><input (blur)="onBlurCall($event)" [(ng-model)]="x.url"></div>
<div>
<select [(ng-model)]="x.extractedElement">
<option *ng-for="#l of extractedList" value="{{ l.name }}">
{{ l.label }}
</option>
</select>
</div>
现在我想要的是:
用户加载站点。输入元素中尚未定义 Url,因此 select 加载默认值 -> 有效。
然后用户在输入元素中输入一个Url并点击退出,从而调用blur函数。从 Url 中提取了一个项目列表 -> 也有效(我在 blur 调用后立即在控制台记录了该列表)。
现在 select 元素应该更新以显示最近提取的列表并让用户 select 它的一个元素 -> 不起作用,因为它仍然显示默认值。
连接的 .ts 文件的作用在这里应该不是什么大问题,但如果需要,我也可以提供有关它的信息。
脚本部分参考打字稿,因为这是我正在使用的(而且我不够流利,无法将 js 翻译成 ts)。
根据要求,ts文件的部分内容:
export class configuration {
// bunch of variables
public extractedList: Array<listItem>;
constructor() {
// other initlializations
this.config = DataContainer.Config; // contains url variable
var l= new listItem();
//console.log('default list being build');
l.Label = 'Please enter the local Url first';
l.Url = '';
l.Name = 'default l';
this.extractedList= [l];
//console.log('default list name: ' + l.Name);
}
public onLocalUrlBlur(event) {
//console.log('Blur call');
this.otherService.getExtractedList(this.config.localUrl, this.setExtractedList, this.getExtractedListError);
// calls external service to extract the list
}
public setExtractedList(listData) {
//console.log('set list ' + listData);
this.extractedList= listData;
//console.log('new list first label: ' + this.extractedList[0].Label);
}
}
好的,由于您将方法 this.setExtractedList
作为回调传递给 getExtractedList
,它是在不同的上下文中执行的,因此您需要将该回调绑定到你的 class 的 context/scope 像这样:
this.otherService.getExtractedList(
this.config.localUrl,
this.setExtractedList.bind(this),
this.getExtractedListError);
实现此目的的另一种方法是显式使用粗箭头函数:
this.otherService.getExtractedList(
this.config.localUrl,
(listData) => { this.setExtractedList(listData) },
this.getExtractedListError);
我正在编写一个带有 html 网站的应用程序,用户在该网站上将 Url 写入文本字段,当离开所述文本字段时,他可以从列表中选择一些内容从 URL.
中提取提取工作正常,但列表项的 selection 不会更新。 因此,如何在 on-blur 事件调用中 refresh/reload/update 某个网络元素(无论是 div 还是 select)?
进一步说明:
我有一个 html 看起来有点像这样:
<div><input (blur)="onBlurCall($event)" [(ng-model)]="x.url"></div>
<div>
<select [(ng-model)]="x.extractedElement">
<option *ng-for="#l of extractedList" value="{{ l.name }}">
{{ l.label }}
</option>
</select>
</div>
现在我想要的是: 用户加载站点。输入元素中尚未定义 Url,因此 select 加载默认值 -> 有效。
然后用户在输入元素中输入一个Url并点击退出,从而调用blur函数。从 Url 中提取了一个项目列表 -> 也有效(我在 blur 调用后立即在控制台记录了该列表)。
现在 select 元素应该更新以显示最近提取的列表并让用户 select 它的一个元素 -> 不起作用,因为它仍然显示默认值。 连接的 .ts 文件的作用在这里应该不是什么大问题,但如果需要,我也可以提供有关它的信息。
脚本部分参考打字稿,因为这是我正在使用的(而且我不够流利,无法将 js 翻译成 ts)。
根据要求,ts文件的部分内容:
export class configuration {
// bunch of variables
public extractedList: Array<listItem>;
constructor() {
// other initlializations
this.config = DataContainer.Config; // contains url variable
var l= new listItem();
//console.log('default list being build');
l.Label = 'Please enter the local Url first';
l.Url = '';
l.Name = 'default l';
this.extractedList= [l];
//console.log('default list name: ' + l.Name);
}
public onLocalUrlBlur(event) {
//console.log('Blur call');
this.otherService.getExtractedList(this.config.localUrl, this.setExtractedList, this.getExtractedListError);
// calls external service to extract the list
}
public setExtractedList(listData) {
//console.log('set list ' + listData);
this.extractedList= listData;
//console.log('new list first label: ' + this.extractedList[0].Label);
}
}
好的,由于您将方法 this.setExtractedList
作为回调传递给 getExtractedList
,它是在不同的上下文中执行的,因此您需要将该回调绑定到你的 class 的 context/scope 像这样:
this.otherService.getExtractedList(
this.config.localUrl,
this.setExtractedList.bind(this),
this.getExtractedListError);
实现此目的的另一种方法是显式使用粗箭头函数:
this.otherService.getExtractedList(
this.config.localUrl,
(listData) => { this.setExtractedList(listData) },
this.getExtractedListError);