2017-04-03 56 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); 
    } 

例二:浏览其他网页

上的联系人另一页我通过接触迭代,并在无线电警告框列表中显示。同样,联系人显示成功,但是当我在添加联系人页面上添加联系人时,新联系人不会出现在收音机警告框列表中。

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}; 

我承担您的LIST是否正在对由this.items引用的数组进行迭代(ngFor)?如果是,则直接更新this.items[this.id]的属性,而不是重新初始化它。

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

(顺便说一句,我建议你要与你的财产的命名是一致的:无论是标识和名称,或ID和姓名(大写字母问题)!)。

如果对正在使用的对象的引用没有改变,那么将始终刷新您的“列表”视图。唯一的例外是在给第三方库的回调中进行的更新。在这种情况下,您可以使用NgZone来“强制”Angular将更新考虑在内。

另外,看看亚历山大关于Observable的伟大建议。

+0

你能查看我对其他回复的评论吗? – Dansmith12

1

您应该使用角提供商(S)与观察特性来通知用户(其它页&组件)有关的变化。

例如阅读这篇文章:http://blog.angular-university.io/how-to-build-angular2-apps-using-rxjs-observable-data-services-pitfalls-to-avoid/

上有这个有很多的信息:https://www.google.com/search?q=angular+provider+observable

+0

有一个问题,我能够使用以下代码来控制正确的数据:var contacts = obs.subscribe((data)=> { console.log(data); });那么我如何访问这些数据?我试着把它分配给一个变量,如上所示,但它返回一个订阅者JSON文件 – Dansmith12

+0

我也试着调用一个函数并将数据作为参数传递,但它总是返回undefined – Dansmith12

+0

您只能访问'可观察的监听功能(“监听”)。您可以直接在此函数中进行更新,也可以将新的最新数据传递给专用于UI更新的函数(例如)。 – VinceOPS