2017-07-30 19 views
2

按鈕點擊時,我使用模態對話框。在那,我在listview中使用開關控制。如何從列表視圖列項的所有開關控制價值,才能在angular2 nativescript

對於列表視圖中的每一行項目,我需要進行開關控制來獲取值。

編輯:

app.modal.html:

<ListView [items]="getListData" class="list" height="160"> 
     <ng-template let-item="item" let-myIndex="index"> 

      <GridLayout rows="*" columns="1.5*, auto, auto"> 

        <Label row="0" col="0" class="item-name" [text]="item.category" ></Label> 

        <Switch row="0" col="1" [checked]="item.toggleVal" (checkedChange)="onFirstChecked($event, myIndex)"></Switch> 

        <Image row="0" col="2" src="res://menu_alert" stretch="none"></Image> 

      </GridLayout> 

     </ng-template> 
    </ListView> 

app.modal.ts文件:

public map: Map<number, boolean>; 

public newFeedsList: Array<NewFeed> = []; 

public constructor(private params: ModalDialogParams) { 


this.map = new Map<number, boolean>(); 


} 

    public onFirstChecked(args, index: number) { 

    let firstSwitch = <Switch>args.object; 

    if(index != null && firstSwitch.checked){ 

     this.map.set(this.newFeedsList[index].id , firstSwitch.checked); 


     console.log("Map :",this.map); 
     console.log("Map :", JSON.stringify(this.map)); 


     } else { 


     } 

    } 

NewFeed.ts:

export class NewFeed { 
constructor(public id: number,public toggleVal : string, public title: string, public description:string, public date:string,public category:string, public imageUrl:string,public iconName:string) {} 

}  

所以,當我啓用列表視圖行項目中的開關,我存儲在數組中的索引。

發生什麼事:

現在我無法打印在控制檯中的哈希映射。它在控制檯中顯示Map:[object Map]

我需要什麼:

當我點擊列表視圖中的項目排開關,它必須得到資訊供稿ID和toggleVal作爲鍵和值。所以我用地圖。

因爲我將id保存爲key和toggleVal作爲map中的值。但我無法在map.so中添加id和toggleVal,因此我不知道這兩個值是否已添加到map中。

應該在同一位置發生變化,如果我們切換單列表視圖行項目「n」的次數。

+0

是這樣相似? https://stackoverflow.com/questions/45198044/databinding-from-within-a-template-in-angular/45199711 – ishandutta2007

回答

1

何不指數=值保存呢?你會得到的值像數組:

[ 
    true, //index 0 is checked 
    false, //index 1 is unchecked 
    true, //index 2 is checked 
    ... //globally index n is value 
] 

,並建立它喜歡:

public onFirstChecked(args, index: number) { 
    let firstSwitch = <Switch>args.object; 
    //always assign whenever it is checked or not 
    Global.newFeedArr[index] = firstSwitch.checked; 
} 

更新

通過使用Map class像你一樣,和存儲的值時,它是檢查或不:

public map: Map<number, boolean>; 
constructor() { 
    this.map = new Map<number, boolean>(); 
} 
public onFirstChecked(args, index: number) { 
    let firstSwitch = <Switch>args.object; 
    this.map.set(this. newFeedsList[index].id, firstSwitch.checked); 
    //this is a debug to display current entries 
    console.log('this.map entries are:'); 
    this.map.forEach(function (value, key) { 
     console.log(key + ' = ' + value); 
    }); 
} 
+0

我newFeedArr似乎是​​這樣的:'公共靜態newFeedArr:數組< 資訊供稿> = []; '我使用這個數組作爲全局訪問無處不在。在'NewFeed'分開的pojo模型類中,我有id和boolean值。所以我需要像[[id = true,id = false,..}]一樣執行鍵和值,每當我們在同一個listview行項目上切換控制時,它應該每次都採用相同的id位置。 – Steve

+0

如何定義NewFeed類?你說[{id = true,id = false,..}],不應該[{id = true},{id = false} ...]? – Fetrarij

+0

請檢查我編輯的帖子。我清楚地補充了迄今爲止我嘗試過的一切。 – Steve

相關問題