2017-01-23 1 views
0

목록이 있는데 목록 항목의 값을 가져 오려고합니다. 나는 내가이 값을Angular2가있는 NativeScript에서 요소 값 가져 오기

onItemTap(event){ 
    let itemValue = this.myItems[event.index]; 
    console.log(itemValue);  
    } 

이를 얻기 위해 다음과 같은 작업을 수행 할 수

import { Component,ViewChild,ElementRef } from "@angular/core"; 
import {topmost} from "ui/frame"; 
import {ListView} from "ui/list-view"; 
export class AppComponent { 

@ViewChild("myFoo") myFooRef: ElementRef; 

    public myItems = []; 
    constructor() { 
      this.myItems.push("1"); 
      this.myItems.push("2"); 
      this.myItems.push("3"); 

    } 

    onItemTap(event){ 

    } 
} 

다음 한 타이프에서

<ListView [items]="myItems" (itemTap)="onItemTap($event)"> 
<template let-item="item" let-i="index" let-odd="odd" let-even="even"> 
    <StackLayout [class.odd]="odd" [class.even]="even"> 
     <Label #myFoo id="grocery-list" [text]='"Value is: " + i'></Label> 
    </StackLayout> 
</template> 

을 다음과 같이

뷰입니다 얻을 것이다 배열의 값 그러나이 배열의 값을 반환합니다.

보기에서 볼 수 있듯이 문자열에 Value is 값이 추가되었습니다.

그럼 어떻게 접근 할 수있는 라벨의 text 속성에 액세스 할 수 있습니까?

답변

3

args.view을 통해 항목 템플릿의보기에 액세스 할 수 있습니다. 그 시점에서, 나는 당신이 목록 아이템에 다른 텍스트를 가질 것이라고 생각하기 때문에, 각 라벨에 대한 고유 ID를 (각도 인덱스를 사용하여) 바인딩을 통해 만드는 것이 중요하다. 그래서 다음과 같은 작업을 수행 할 수 있습니다 다음

<ListView [items]="myItems" (itemTap)="onItemTap($event)"> 
    <template let-item="item" let-i="index" let-odd="odd" let-even="even"> 
     <StackLayout [class.odd]="odd" [class.even]="even"> 
      <Label [id]="'lbl' + i" [text]='"Value is: " + i'></Label> 
     </StackLayout> 
    </template> 
</ListView> 

와 내가 하나의 레이블이 당신의 onItemTap

public onItemTap(args: ItemEventData) { 
    console.log("Item Tapped at cell index: " + args.index); 
    console.log(args.object); // prints something like ListView(137) 
    console.log(args.view); // prints something like StackLayout(265) 

    var lbl = <Label>args.view.getViewById("lbl" + args.index); 

    console.log(lbl.text); // prints the actual text of the tapped label 
} 
+0

에. id가 인덱스를 기반으로하지 않더라도 텍스트 값을 얻고 있습니다. – krv

+0

이 ID를 추가하는 것은 각도 바인딩을 기반으로하지만 인덱스 기반이 아닙니다. 그래서 나는이 [id] = " 'lbl'+ i"'대신'[id] = " 'lbl'"'을 가지고 있고 여전히 작동합니다. 또한이'id = "lbl"'도 잘 작동합니다. – krv

+1

템플릿이 동일한 텍스트를 사용하는 한 예상대로 작동 할 것입니다 ... 여전히 동일한 ID를 가진 여러 항목을 갖는 것은 모든 규칙에 위배됩니다 색인을 사용하여 고유 한 ID를 작성하지 않으면 어떤 일이 벌어 지는지). 예를 들어 목록에 itemTemplates를 사용하고 10 개의 항목이있는 경우 모두 동일한 ID를 갖습니다. 어떻게 3 번째 항목을 가져 옵니까? –

관련 문제