2017-04-03 3 views
0

이온 2에 대해 반복적으로 발생하는 문제 중 하나는 스토리지 서비스입니다. 성공적으로 저장된 데이터를 설정하고 검색했습니다. 그러나, 내가 뭔가를 저장할 때 페이지/응용 프로그램을 새로 고치지 않으면 다른 페이지에서 액세스 할 수 없습니다.이온 2 스토리지 서비스와 동시에 스토리지에 액세스

예 하나를

내가 편집 연락처 페이지로 밀어 연락처를 편집 후 변경, saveEdits을합니다. saveEdits는 올바른 연락처로 변경했지만 응용 프로그램이 새로 고쳐질 때까지 연락처 목록을 업데이트하지 못합니다.

HTML :

<button (click)="saveEdits(newName, newPostCode)"ion-button round>Save Edits</button> 

타이프 :

saveEdits(newName, newPostCode){ 
    console.log("saveid"+this.id); 
    this.name = newName; //saves property 
    this.postcode = newPostCode; //saves property 
    this.items[this.id] = {"id": this.id, "Name": newName, "PostCode": newPostCode}; 
    this.storage.set('myStore',this.items); 
    //this.navCtrl.pop(ContactPage); 
    } 

예 2 : 다른 페이지에서 다른 페이지

에 액세스 연락처 내가 접촉을 통해 반복하고 라디오 경고 상자의 목록에 표시 . 다시 연락처가 성공적으로 표시되지만 연락처 추가 페이지에 연락처를 추가하면 새 연락처가 라디오 경고 상자 목록에 나타나지 않습니다.

addDests(){ 
    console.log('adddests'); 
    { 
    let alert = this.alertCtrl.create(); 
    alert.setTitle('Choose Friend'); 

    for(let i = 0; i<this.items.length; i++){ 
     console.log('hello'); 
     alert.addInput({ 
     type: 'radio', 
     label: this.items[i].Name, 
     value: this.items[i].PostCode, 
     checked: false 
    }); 
    } 



    alert.addButton('Cancel'); 
    alert.addButton({ 
     text: 'OK', 
     handler: data => { 
     console.log(data); 
     } 
    }); 
    alert.present(); 
    } 
    } 

답변

1

당신은 변수가 가리키는 참조 변경하고 있습니다 :

this.items[this.id] = {"id": this.id, "Name": newName, "PostCode": newPostCode}; 

내가 가정을이에 대한 많은 정보가 있습니다 http://blog.angular-university.io/how-to-build-angular2-apps-using-rxjs-observable-data-services-pitfalls-to-avoid/

: 예를 들어

이 글을 읽고 목록이 this.items에 의해 참조 된 배열을 반복 (ngFor)하고 있습니까? 예인 경우 다시 초기화하지 말고 this.items[this.id]의 등록 정보를 직접 업데이트하십시오.

this.items[this.id].Name = newName; 
this.items[this.id].PostCode = newPostCode; 

은 (그건 그렇고, 당신의 속성 이름과 일치하도록 권하고 싶습니다 : ID와 이름, 또는 ID와 이름 (대문자 중요) 중 하나를!).

사용중인 개체에 대한 참조가 변경되지 않으면 "목록"보기가 항상 새로 고쳐집니다. 유일한 예외는 세 번째 파트 라이브러리에 주어진 콜백에서 수행 된 업데이트입니다. 이 경우 NgZone을 사용하여 Angular에 업데이트를 고려하도록 강제 적용 할 수 있습니다.

또한 Observable에 대한 Alexander의 훌륭한 조언을 살펴보십시오.

+0

다른 답변에 대한 내 의견을 확인할 수 있습니까? – Dansmith12

1

당신은 가입자에게 통지 (다른 페이지 & 구성 요소) 변경 사항에 대한 위해 관찰 가능한 속성 각도 업체 (들)을 사용해야합니다. https://www.google.com/search?q=angular+provider+observable

+0

한 가지 문제는 다음 코드로 올바른 데이터를 처리 할 수 ​​있다는 것입니다. var contacts = obs.subscribe ((data) => { console.log (data); }); 어떻게하면이 데이터에 액세스 할 수 있습니까? 위와 같이 변수에 할당하려고 시도했지만 구독자 JSON 파일을 반환합니다. – Dansmith12

+0

함수를 호출하고 데이터를 매개 변수로 전달했지만 항상 정의되지 않은 값을 반환했습니다. – Dansmith12

+0

' 관찰 가능한 청취 기능 (청취자). 이 함수에서 직접 업데이트를 수행하거나 새 업데이트 데이터를 UI 업데이트 전용 함수 (예 :)로 전달할 수 있습니다. – VinceOPS