我正在測試Ionic 2和Angular 2,並且對於訪問父視圖的屬性有疑問。訪問父視圖屬性的最佳方式(Ionic 2,Angular 2)
例如,我有一個測試應用程序,其中我的視圖是項目列表,當我單擊一個項目時,我輸入他們的詳細信息。很簡單,是吧?那麼,細節視圖已經有了編輯元素的函數,然後應用這些更改。
對於這一點,我用三種不同的方式:
- 一種是通過對象引用,只是對其進行編輯,其中編輯它返回該列表中(我想這是非常最佳)
- 之前典型的navCtrl.pop(),通過navParam將參數傳遞給函數「ionViewDidEnter()」,該函數在您回到視圖時執行,並在那裏過濾,以便執行您所需的任務。問題:它不起作用(可能是一個錯誤)。
- 這裏談到的krakken:當除去的元件,這將無法工作,因爲我有將其從列表中刪除,按照實施例,具有典型的list.splice(指數,1);
我發現執行此兩種不同的方法:你可以通過新的視圖列表的引用,或可以從NavController訪問它,就像我在這裏做的:
remove(){
let list = this.navCtrl._views[0].instance.list;
for(var i=0;i<list.length;i++){
if(list[i].id === this.contact.id){
list.splice(i,1);
}
}
this.navCtrl.pop();
}
在這裏,我有這個奇怪的技術的另一個例子,重用創建一個新的元素編輯觀點:
editContact(obj){
if(this.onEdit){
this.onEdit = false;
this.editBtnTxt = "Edit contact";
if(this.onCreate){
this.navCtrl._views[0].instance.list.push(this.contact);
this.navCtrl.pop();
}
}else{
this.editBtnTxt = 'Apply changes';
this.onEdit = true;
}
}
雖然這工作得很好,並沒有拋出任何錯誤,我想我只是有點幸運,因爲:你怎麼知道的你想訪問的視圖的索引,如果你不是這樣一個簡單的測試項目,有兩個視圖,每個例子?我想這種做事方式可能會有很多錯誤。
但是,因爲它的工作原理,它似乎比傳遞大量參數更優化,或使用localStorage作爲「全局」變量,我一直堅持這一點。
我想知道的是... 哪種方式是最優化的訪問父視圖屬性?
做到這一點的最佳方法是不要做這件事。您應該改爲在組件之間共享數據並在需要推送時傳遞參數的服務。 – misha130