Получить переменную из angular сервиса с компонентом приложения - PullRequest
1 голос
/ 08 января 2020

У меня есть служба, у которой есть свойство publi c, называемое companyDetail. И в конструкторе я устанавливаю его значение из собственного хранилища:

import { Platform } from '@ionic/angular';
import { Injectable } from "@angular/core";
import { NativeStorage } from '@ionic-native/native-storage/ngx';

@Injectable({
    providedIn: 'root'
})
export class SharedDataService{
    public companyDetail;
    constructor( private platform:Platform, private nativeStorage: NativeStorage ){
        this.platform.ready().then(()=>{
            this.nativeStorage.getItem('company').then(res=>{
                this.companyDetail = res
            })
    })
    }
}

Я получаю companyDetail в приложении .component file:

import { Platform } from '@ionic/angular';
import { NativeStorage } from '@ionic-native/native-storage/ngx';
import { SharedDataService } from './content/services/sharedData.service';
import { Component } from '@angular/core';
@Component({
    selector: 'app-root',
    templateUrl: 'app.component.html',
    styleUrls: ['app.component.scss']
})
export class AppComponent {
    constructor(private sharedData:SharedDataService ){
         console.log(this.sharedData.companyDetail);
    }
}

Но всегда записывается null значение.

1 Ответ

0 голосов
/ 09 января 2020

Я думаю, что у вас проблема asyn c,

Я не знаком с Ioni c, это простой пример для Интернета.

Если вы можете использовать Rx js в вашем проекте Ioni c этот пример должен работать и для Ioni c.

import { Platform } from '@ionic/angular';
import { Injectable } from "@angular/core";
import { NativeStorage } from '@ionic-native/native-storage/ngx';
import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';

@Injectable({
    providedIn: 'root'
})
export class SharedDataService{
    public companyDetail = null;
    public companyDetailSubject = new BehaviorSubject(this.companyDetail);

    constructor( private platform:Platform, private nativeStorage: NativeStorage ){
        this.platform.ready().then(()=>{
            this.nativeStorage.getItem('company').then(res=>{
                this.companyDetail = res;
                this.companyDetailSubject.next(this.companyDetail);
            })
    })
    }
}

и в app.component.ts

import

import { filter, take } from 'rxjs/operators';

конструктор

   constructor(private sharedData:SharedDataService ){
      this.sharedData.companyDetailSubject.pipe(
          filter(value => !!value), 
          take(1)
      ).subscribe(response => {
           console.log(response)
      })
    }
...