2017-04-01 26 views
0

我是新来的离子2,我有一个问题,你们可能认为这很容易处理,但我被封锁了。离子2:变量被修改,但不会在视图中改变HTML

我有一个变量,我想在我的页面(在智能手机屏幕上)显示,我把这个变量放在{{myVar}}之间,并且它通过屏幕上的HTML显示。直到这里,没问题。当myVar的值因为我按下按钮而改变时,该值也更新为屏幕。但是,当一个函数修改myVar的值时,myVar的值在代码中更新(我在console.log中看到它),但不在屏幕视图中。

请问你们能否帮我解决问题,我没有找到任何关于这个问题的信息。也许有一个教程解释它是如何工作的?

谢谢

编辑:对不起,我不知道如果我的源代码会有所帮助,但在这里我们去:

我的代码是这样的,我周围的扫描设备与BLE。它显示所有可用BLE的设备的结果,我连接到我需要的设备并显示设备提供的所有服务。 (我使用cordova插件BLE)

这是我连接的设备提供的所有服务的HTML视图。

<ion-header> 
<ion-navbar> 
    <ion-title>{{device.name}}</ion-title> 
</ion-navbar> 
</ion-header> 
<ion-content> 
<ion-buttons> 
    <button ion-button (click) = "disconnect(device.id)" block>Disconnect</button> 
</ion-buttons> 
<ion-card *ngFor="let characteristic of characteristics"> 
<ion-card-header>UUID: {{characteristic.characteristic}}</ion-card-header> 
<ion-card-content> 
    <p>Properties: {{characteristic.properties}}<br> 
    Service: {{characteristic.service}} <br> 
    <ion-buttons end> 
    <button *ngIf="displayNotifyButton(characteristic.properties)== true" ion-button (click)="startNotify(device.id, characteristic.service, characteristic.characteristic)" round>Notify</button> 
    </ion-buttons> 
</ion-card-content> 
</ion-card> 
<p>AMOUNT OF MONEY : {{money}}</p> 

什么是这里重要的是按钮通知运行功能startNotify(...)。和段落

金额:{{money}}

{{money}}是被修改但在HTML视图中不会更改的变量。

下面是函数startNotify:

startNotify(deviceID, serviceUUID, characteristicUUID) { 
    this.isNotify = true; 
    this.ble.startNotification(deviceID, serviceUUID, characteristicUUID).subscribe(buffer => { 
    var dataView = new DataView(buffer); 
    var coin = dataView.getUint8(0); 
    console.log("## NOTIFY VALUE ## " + coin); 
    this.sortCoin(coin); 
    console.log('## MONEY ## '+ this.money); 
    }, error => { 
    console.log("## NOTIFY ERROR ## " + error); 
    }); 
} 

这是构造函数:

constructor(public navCtrl: NavController, public navParams: NavParams, private ble: BLE) { 
    this.device = this.navParams.get('device'); 
    console.log("## DEVICE INFORMATION ##" + JSON.stringify(this.device)); 
    this.connecting = true; 
    this.isNotify = false; 
    this.connect(this.device.id); 
    this.money = 0; 
    } 

在这里,它是sortCoin方法,即只有一个交换机和修改的可变货币

sortCoin(value){ 
switch (value){ 
    case 1: 
    this.money += 0.1; 
    break; 
    case 2: 
    this.money += 0.2; 
    break; 
    case 4: 
    this.money += 0.5; 
    break; 
    case 8: 
    this.money += 1; 
    break; 
    case 16: 
    this.money += 2; 
    break; 
    case 32: 
    this.money += 5; 
    break; 
    case 65: 
    this.money -= 0.1; 
    break; 
    case 66: 
    this.money -= 0.2; 
    break; 
    case 68: 
    this.money -= 0.5; 
    break; 
    case 72: 
    this.money -= 1; 
    break; 
    case 80: 
    this.money -= 2; 
    break; 
    case 96: 
    this.money -= 5; 
    break; 
} 
} 

所以我的问题是:当通知由设备完成时,它发送一个n数组缓冲区,我将它解释并发送给sortCoin方法。在sortCoin方法中,变量货币的值被修改(我可以通过控制台日志查看它),但是在HTML视图中数量不变,它仍然显示为0,因为货币在构造函数中设置为0。

我希望我的源代码将帮助你算出我的问题了:)

谢谢

+1

来帮助你,我们需要的代码更新,以发布 – Aravind

+1

欢迎来到SO ..请提供[mcve](http://stackoverflow.com/help/mcve) –

+0

阅读[如何问](http://stackoverflow.com/help/how-to - 问),它应该帮助你。 –

回答

-1

好吧,我解决我的问题与NgZone

this.zone.run(() => { 
     this.getValueOf2 = data.amount; 
    });