在我的ionic2应用程序中,我尝试使用未包含在Ionic Native中的Cordova插件。我提到了约什莫罗尼在这里写的文章:https://www.joshmorony.com/using-cordova-plugins-in-ionic-2-with-ionic-native/。一切正常(代码编译,执行没有问题)。
由于Ionic Native不支持此插件,因此没有承诺和可观察,并且需要一些时间来响应。这个插件确实返回了价值。我试图将插件返回的值分配给我的视图,但它失败了(错误消息:TypeError:null不是一个对象(评估' this.name = t'))。
PS:如果我只是将响应置于警报,警报(响应)中,它会正确显示返回的值。
以下是我的代码,有人可以帮助我吗?非常感谢你: - )
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Platform } from 'ionic-angular';
declare var airwatch;
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
name: string = null;
constructor(public navCtrl: NavController, platform: Platform) {
// code starts here
platform.ready().then(() => {
(<any>window).plugins.airwatch.username(function(response){
alert(response);// this alert works! it will correctly show the response in text mode (the response is text)
this.name = response; // the line failed, it said: cannot insert null to this.name but I thought the response is text and it works when I use alert or console.log
}, function(error){
this.name = error;
});
});
}
}
我也尝试将代码放在ionViewDidLoad(){}中,但它仍然没有用。相同的错误消息:TypeError:null不是对象(评估&#39; this.name = t&#39;)
我尝试过NgZone,但它没有用。
是否因为返回的值不在角度&#34;范围&#34;?
中答案 0 :(得分:1)
你需要提及这个&#39;这个&#39;作为第二个&#39;回调中的那个,与回调有关。
所以只需添加
let self = this;
在调用插件之前,然后在回调中,您可以使用新创建的&#39; self&#39;变量。您的代码看起来像
let self = this;
(<any>window).plugins.airwatch.username(function(response){
alert(response);// this alert works! it will correctly show the response in text mode (the response is text).
this.name = response; // the line failed, it said: cannot insert null to self.name but I thought the response is text and it works when I use alert or console.log
}, function(error){
self.name = error;
});