2016-10-15 1 views
1

Создана служба со следующим кодом. Я написал две функции для создания собственного хранилища с ip и портом, а следующий - для получения значений из собственного хранилища.Передача значения из службы на страницу в Ionic 2

DatabaseService

export class DatabaseService { 
    ... 
    public ip: string; 
    public port: string; 
    ... 
    public createConnectionInfo(ip: string, port: string) { 
    NativeStorage.setItem('connectionStorage', { ip: ip, port: port }) 
     .then(
     () => console.log('Stored Connection Information!'), //Working 
     error => console.error('Error storing connection information', error) 
    ); 
    } 
    ... 
    public getConnectionInfo() { 
    this.platform.ready().then(() => { 
     NativeStorage.getItem('connectionStorage').then(data => { 
     this.ip = data.ip; // I'm setting the ip in this public variable 
     this.port = data.port; 
     console.log(this.ip); //Works 
     }, error => { 
     this.navCtrl.push(SettingPage); 
     }); 
    }); 
    } 
    ... 
} 

SettingPage

export class SettingPage { 
    connection: any; 
    service: DatabaseService; 
    ip: string; 
    port: string; 
    constructor(public navCtrl: NavController, platform: Platform, service: DatabaseService) { 
    this.service = service; 
    platform.ready().then(() => { 
     if(true){ 
     console.log(this.service.ip+" IP FROM THE SERVICE"); \\I'm trying to get the ip from the service. 
     } 
    }); 
    } 
    ... 
} 

Я был в состоянии создать родное хранилище, а также извлекать значения из родного хранения, но я не мог пройти мимо, что от моего на странице настроек. Пожалуйста, порекомендуйте. Спасибо. Я все еще пытаюсь решить эту проблему. Пожалуйста помоги.

Мои Ионные Информация

Cordova CLI: 6.3.1                            
Gulp version: CLI version 3.9.1                         
Gulp local:                              
Ionic Framework Version: 2.0.0-rc.1                        
Ionic CLI Version: 2.1.0                           
Ionic App Lib Version: 2.1.0-beta.1                        
ios-deploy version: Not installed                        
ios-sim version: Not installed                         
OS: Mac OS X El Capitan                           
Node Version: v6.7.0                            
Xcode version: Xcode 7.3.1 Build version 7D1014 
+0

Я предполагаю, что когда вы пытаетесь получить доступ к 'service.ip', это не определено, просто чтобы проверить, измените свой код SetupPage, оберните свой консольный журнал в таймаут, примерно так:' setTimeout (() = > {console.log (this.service.ip + «IP FROM SERVICE»);}, 100) 'И посмотрите, записывает ли он ваш IP-адрес –

+0

Спасибо @FabioAntunes. Да, он работает, но я не хочу использовать функцию setTimeout(). Есть ли другой путь? –

+0

, а также, это работает иногда только не всегда. –

ответ

1

Вы можете использовать метод getConnectionInfo, чтобы получить IP-адрес, если настроить этот метод немного вернуть обещание. Что-то вроде этого:

public getConnectionInfo() { 
    return this.platform.ready().then(() => NativeStorage.getItem('connectionStorage')) 
    .then(data => { 
     this.ip = data.ip; 
     this.port = data.port; 
     console.log(this.ip); 
     return data; 
    }).catch(error => { 
     this.navCtrl.push(SettingPage); 
     return error; 
    }); 
    }); 
} 

Тогда на вашем SettingPage вместо доступа непосредственно значение, которое вы назвали бы getConnectionInfo, как это:

export class SettingPage { 
    connection: any; 
    service: DatabaseService; 
    ip: string; 
    port: string; 
    constructor(public navCtrl: NavController, platform: Platform, service: DatabaseService) { 
    this.service = service; 
    platform.ready().then(() => this.service.getConnectionInfo()) 
     .then(() =>{ 
     if(true){ 
      console.log(this.service.ip+" IP FROM THE SERVICE"); 
     } 
    }); 
    } 
    ... 
} 

Вы, возможно, потребуется сделать некоторые настройки для этого кода, но он должен работать так, как есть.

+1

И вам даже не нужно использовать 'platform.ready(). Then()' в 'SettingPage', поскольку он уже используется службой, поэтому просто используйте' this.service.getConnectionInfo(). Then() 'достаточно –

Смежные вопросы