2017-10-04 4 views
2

스토리지에서 어레이를 가져 오려고 시도하고 있습니다. MaschinenArray에 저장하고 이온 목록을 생성합니다. 이것에 대한 나의 유일한 문제는 "ionic serve"명령 다음에 페이지를 다시로드해야한다는 것입니다. 그렇지 않으면 Maschinen = null을 예로들 수 있습니다.페이지를 다시 불러올 때까지 Ionic Storage가 작동하지 않습니다.

이 기능이 비동기이며 HTML이로드되기 전에 문제가 될 수 있다고 생각했지만 나중에 이벤트를 버튼을 통해 트리거하면 여전히 null이 표시됩니다.

export class MaschinenParkPage { 
maschinenArray : Maschine[] = []; 

constructor(private menu: MenuController, public alertCtrl: AlertController, public navCtrl: NavController, private storage: Storage) { 


    this.storage.get('maschinen').then((buffer) => { 

     this.maschinenArray = buffer; 
    }); 

어떤 아이디어 :

나는 생성자 위의 배열을 inititalize? 또는 생성자가 일부 변수를 초기화하기위한 잘못된 지점 일 수 있습니까?

+0

https://ionicframework.com/docs/storage/ – felix9607

+0

물건을 가져 오기 전에 storage.ready를 기다려야합니다. – TomG

+0

이 도움이되지 않습니다. 이미 시도했습니다. – felix9607

답변

0

정말 그 배열을 선언해야합니까? 올바르게 저장 당신이 같은 객체 배열을 검색 할 수 있습니다를 저장 한 경우

, 이미 이미 내 코드에서 이런 식으로 뭔가를 작성하고 완벽하게 잘 작동했다

export class MaschinenParkPage { 
maschinenArray : any; 

constructor(private menu: MenuController, public alertCtrl: AlertController, public navCtrl: NavController, private storage: Storage) { 


    this.storage.get('maschinen').then((buffer) => { 

     this.maschinenArray = buffer; 
     console.log(this.maschinenArray); 
    }); 

. 당신은 검사합니다 (Ctrl + 똥 + I)를 크롬 및

업데이트를 CONSOLE.LOG 확인 갈 수 는 또한 검사 크롬으로 이동 -> 응용 프로그램 탭 -> 색인화 찾을 'MASCHINEN'저장. 확인해 봐.

+0

슬프게도 도움이되지 않았습니다. 분명히하려면 : 페이지를 호출하는 경우 : MaschineParkPage 및 예를 들어 콘솔에 로그인하는 버튼을 클릭하면 'null'이라고 표시됩니다. 개체를 추가하려고하면 오류가 발생합니다. null의 속성 '푸시'를 읽을 수 없습니다. 그냥 F5를 한 번 클릭하고 모든 것이 작동 할 때까지 배열이 초기화되지 않은 것처럼 보입니다 ... – felix9607

+0

indexeddb에 "Maschinen"저장소가 없습니다. 하지만 _ionickv 웹 SQL 섹션에서, 어디에 MaschinenArray 항목을 찾았습니다. – felix9607

+0

@ felix9607 예, 그게 _ionickv에 있고 내 두 번째 대답을 확인하십시오. –

0

이제 내가 추측 한 문제를 기억합니다. 나는 로그인하고 로그인 정보에 따라 데이터를 표시하기를 원했던 비슷한 문제가있었습니다.

  1. 처음에는 location.reload()를 사용했습니다. 그게 좋지 않아 로그인 후 전체 응용 프로그램을 다시로드합니다.

  2. 그런 다음 내 문제를 해결 한 Events from ionic angular을 발견했습니다. 너는 이것을 시도 할 수있다. 샘플 코드는 내가 ngOnInit 스토리지에서 데이터를 검색 내 코드에 따라 내 로그인 컨트롤러

    this.storage.ready().then(() => { 
         this.storage.set('loginData', response).then(()=>{ 
         this.events.publish('user:login'); 
         }); 
        }); 
    

    에 그것을

    this.events.subscribe('user:login',() => { 
         this.ngOnInit(); 
        }); 
    

    가입 어디에 내 사이드 ​​바 컨트롤러,

입니다. 희망이 도움이됩니다.

+0

나는 이것을 시험해 볼 것이다! 지금까지 도와 주셔서 감사합니다 – felix9607

+0

location.reload()가 sqlite cordova plugin을 삭제합니다.아직 사용하지 않는 것이 좋습니다. – TomG

+0

@TomG now location.reload()가 아닌 Events를 사용하고 있습니다. –