2017-08-16 69 views
1

我试图在离子框架项目中导入新功能。我执行以下命令行:离子框架导入模块,变量始终未定义

$离子科尔多瓦插件添加科尔多瓦 - 插件 - uniquedeviceid

$ NPM在安装--save @离子本地/独特,设备ID

我的文件MyOwnService.ts,我将其导入:

import { UniqueDeviceID } from '@ionic-native/unique-device-id'; 

import { Http } from '@angular/http'; 

然后在我的MyOwnService的构造函数:

constructor(http: Http, uniqueDeviceID: UniqueDeviceID) { 
     console.log('Loading provider'); 
     uniqueDeviceID.get() 
      .then((uuid: any) => console.log("UID : " + uuid)) 
      .catch((error: any) => console.log("UIDERR : " + error)); 
    } 

uniqueDeviceID始终未定义。如果我在构造函数中添加一个额外的参数,http'也不起作用。

我错过了什么吗?我是否需要在app.module.ts中添加一些内容?

我验证的目录中workspacedir/node_modules/@ionic-native/unique-device-id´

+0

你是否将UniqueDeviceId设置为提供者? –

+0

不,MyOwnService是一个提供者。必须UniqueDeviceID是提供者的提供者吗? 我试图将它注册为app.module.ts中的提供程序,但它没有帮助 – user2447161

回答

1

必须存在UniqueDeviceID是一个供应商的供应商?

是的。从Ionic-Native 3.x开始,所有离子本地服务都需要设置为提供者。检查here

@NgModule({ 
    ... 

    providers: [ 
    ... 
    UniqueDeviceID 
    ... 
    ] 
    ... 
}) 
export class AppModule { } 

其次,访问插件时,你需要使用this.platform.ready()象下面这样:

constructor(http: Http, uniqueDeviceID: UniqueDeviceID) { 
     console.log('Loading provider'); 
     this.platform.ready().then(() => { 
     uniqueDeviceID.get() 
      .then((uuid: any) => console.log("UID : " + uuid)) 
      .catch((error: any) => console.log("UIDERR : " + error)); 
     }); 
    } 

还要确保你在一个模拟器/设备正在测试为使用ionic serve时科尔多瓦插件未启用。

+0

感谢您的回复。我仍然得到一个“不能读取属性”得到“未定义”,但我确实使用离子服务... 我会尝试使用一个模拟器,但由于我正在密切与'离子发球'对于我的测试,有没有办法处理它? – user2447161

+0

你应该在设备上测试。 –