javascript - Angular / Typescript无法设置未定义的属性“数据”
问题描述
我有一些代码正在读取 xml 然后解析数据。
所以这里是代码:
data = [];
ngOnInit() {
this.myService.getData().subscribe(XMLResult => {
const parseString = require('xml2js').parseString;
parseString(XMLResult, function (err, result) {
console.dir(result.listResponse.instance); // Returns Array
this.data = result.listResponse.instance; // Here's the line giving me the error
});
});
}
Console.log 正在返回如下数据:
Array(10)
0:
$: {id: "23" name: "name 1"}
1:
$: {id: "45" name: "name 2"}
ETC
我该如何解决这个问题?
解决方案
在您当前的方法中,this
不再引用您的组件。
修改您的回调以使用箭头函数,这样您就不会丢失范围:
parseString(XMLResult, (err, result) => {
console.dir(result.listResponse.instance);
this.data = result.listResponse.instance;
})
在箭头函数之前,每个新函数都定义了自己的 this 值(在构造函数的情况下是一个新对象,在严格模式函数调用中是未定义的,如果函数被称为“对象方法”,则为基础对象等)。事实证明,对于面向对象的编程风格,这并不理想。
推荐阅读
- javascript - 如何正确定义函数的数组参数?
- python - 不理解地计算总和
- javascript - 如何使用数组包含函数检查对象数组中的对象相等性?
- apache-spark - 所需的执行程序内存高于此集群的最大阈值
- reactjs - 如何使用 webpack ManifestPlugin 为具有 2 个入口点的反应项目创建 2 个不同的 manifest.json 文件?
- dictionary - 为什么我不能在这里创建一个简单的字典
- reactjs - 使用 Next.js 进行 S3 上传 - 面临问题
- angular - 在订阅之前解析为 observable 的值
- c++ - 调试 X11 程序时如何避免 SIGPIPE(由于超时?)?
- javascript - “必需”标签第一次不起作用