我的应用中有一个创建ActiveX对象的方法。在这种方法的响应中,我可以从我调用的站点访问我需要的数据。
我试图将该数据传递给组件中定义的变量,但由于某种原因,它无法访问它。
组件:
export class HomeComponent implements OnInit {
adminData = [];
action: string = '';
test(){
this.someMethod(
{
node: 'loaduserpage_home',
},
"http://someSite",
"GET",
(msg) => {
// Create an element we can search though
let body = document.createElement("div");
body.innerHTML = msg.match(/<body>[\s\S]+?<\/body>/i);
// Loop over inputs for demo
let inputs = body.getElementsByTagName('input');
// Loop over all inputs in the response and push their field name and value to our array
for (let index = 0; index < inputs.length; ++index) {
this.adminData.push({inputName: inputs[index].name, inputValue: inputs[index].value })
}
this.action = 'Search Completed.';
}, true)
}
someMethod(vars, varURL, varMethod, donext, async){
// creates an active x object
}
}
HTML:
<div class="container">
<strong>Data</strong>
<button (click)="test()" class="btn btn-primary">Run Active X</button>
<table class="table" *ngIf="adminData.length">
<thead>
<th>Input Field Name</th>
<th>Input Field Value</th>
</thead>
<tbody>
<tr *ngFor="let a of adminData">
<td>{{ a.inputName }}</td>
<td>{{ a.inputValue }}</td>
</tr>
</tbody>
</table>
</div>
如果我console.log(inputs[index].name)
,我需要的数据就好了。但是,当我尝试将数据推送到我的变量时,它似乎没有成功。
但是,如果我第二次点击此按钮(在我知道呼叫完成后),数据显示正常。
这是范围问题还是更改检测问题?
更新
似乎这可能是一个异步问题。如果我将其更改为同步,则数据显示正常(在浏览器停止冻结之后。但是,当异步时,它不会更新数据。我想知道在我们知道调用完成后是否需要实施更改检测?< / p>