我正在使用Angular应用程序,该应用程序侦听MQTT代理。我正在尝试使用JSON.parse()函数解析响应。看起来很简单,但是我无法将正确的数据存储到全局变量中。
我正在发布此数据(灯光的ID和该灯光的rgb值):
[{"light":2,"color":{"r":150,"g":24,"b":24}},{"light":3,"color":{"r":150,"g":24,"b":24}},{"light":4,"color":{"r":150,"g":24,"b":24}},{"light":6,"color":{"r":150,"g":24,"b":24}},{"light":7,"color":{"r":150,"g":24,"b":24}}]
代码看起来像这样。
export class LightsComponent implements OnDestroy {
lightsValues;
private subscription: Subscription;
constructor(private mqttService: MqttService) {
this.subscription = this.mqttService.observe(TOPIC).subscribe((message: IMqttMessage) => {
this.lightsValues = JSON.parse(message.payload.toString());
console.log(JSON.parse(message.payload.toString()));
console.log(this.lightsValues);
});
}
console.log的结果很奇怪,因为我只将与
如您所见,所有对象的 light 参数设置为0, rgb 设置正确。
但是,当我将 lightsValues 变量更改为local时,我得到了正确的数据。
export class LightsComponent implements OnDestroy {
lightsValues;
private subscription: Subscription;
constructor(private mqttService: MqttService) {
this.subscription = this.mqttService.observe(TOPIC).subscribe((message: IMqttMessage) => {
let lightsValues = JSON.parse(message.payload.toString());
console.log(JSON.parse(message.payload.toString()));
console.log(lightsValues);
});
}
使用此代码,两个console.logs中的数据都是正确的-https://imgur.com/p2xnju9
我需要将这些正确的数据保存到我的全局变量中,因为它用作其他组件的@Input。
<app-lights-preview [lightsValues]="lightsValues"></app-lights-preview>
子组件:
export class LightsPreviewComponent {
@Input() lightsValues;
.
.
.