2016-11-10 37 views
12

Ben dinamik olarak oluşturulmuş bu girişlere sahip oluşturulan HTML elemanlarının referans almak için:Angular2 Nasıl dinamik

<div *ngFor="let cell of column; let i = index;"> 
      <!-- Material design input--> 
      <md-input id="my-input-{{i}}"> 
      </md-input> 
    </div> 

id=my-input-{{i}} Ben bu dinamik kimliği temel DOM öğesine bir referans almak istiyorum lütfen unutmayın. Bu giriş 3, 6 veya daha fazla giriş olabilir, bu yüzden kimliğe dinamik olarak erişmem ve ona bir göz atmam gerekiyor.

+1

üzerinde test gerekli Başka hiçbir açısal garip töreni? – yurzui

+0

@yurzui I Bir düğmeye basarak tüm girişlerin değerlerini almamız gerekiyor, sorun miktar ve içerik olarak değişebilir, örneğin 3 giriş veya 6 giriş veya 4 veya 5 olabilirler. Dinamik kimliğini oluşturmanın ve içeriğini dinamik olarak almanın bir yolu olan – commonSenseCode

+0

, dom'a erişebilmeniz için gerekli mi? – quindimildev

cevap

7

tek yanıttır

let elem:Element = document.getElementById("myProgrammaticallyChosenIndex")

tamamlamaya çalıştığınız Ne

açısal 4+

0

DOM'a elementRef tarafından erişebilirsiniz.

Bu sizin izin doğrudan erişim sağlar ElementRef class

adında bir sınıf vardır o

constructor(myElement: ElementRef) { ... } 

Ve nativeElement özelliği

elementRef.nativeElement.select("#blabla") 
+1

'elementRef.nativeElement'' select' yöntemine sahip değil. –

+0

Uh, neden elementRef.nativeElement.querySelector() 'değil? Bkz. Https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector –

+0

@vicgoyso chill out ve bunun iyi bir cevap olmadığını düşündüğünüze dair bir karşı örnek veya açıklama sağlayın. querySelector yanıtı nasıl güzel olunacağına iyi bir örnektir. – dudewad

0

tarafından DOM öğesine erişmek ederek yapıcı atmak enjekte mevcut bileşen veya DOM barındırma yönergesi.

Sen ElementRef ve Renderer ile Açısal 2.

Örnek tarafından sağlanan jQuery veya Renderer sınıfını kullanarak değişiklik yapmak için o zaman html öğesi özelliklerine erişebilir, bir HTML öğesi almak için ElementRef.nativeElement kullanabilirsiniz:

@angular/core den
import { Directive, ElementRef, Input, Renderer } from '@angular/core'; 
@Directive({ selector: '[myHighlight]' }) 
export class HighlightDirective { 
    constructor(el: ElementRef, renderer: Renderer) { 
     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow'); 
    } 
} 
0

Kullanım ElementRef sınıf ebeveyn elemanı almak ve daha sonra dinamik elemanlar b almak için HTMLElement oluşturmak için y sınıfı adı.

Bileşen:

declare var $: any; //intentional use of jQuery-not recommended though 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <input type='button' (click)='addDiv()' value='Add New Div' /> 

    <input type='button' (click)='selectDiv()' value='Select' /> 
    ` 
}) 
export class App { 
    constructor(private elRef: ElementRef) { 
    } 

    addDiv() { 
    /*intentional use of jQuery for appending new div 
    give a class to your dynamic elements*/ 

    $('my-app').append("<div class='foo'>Hello I'm Dynamic!</div>"); 
    } 

    selectDiv() { 
    //create a new HTMLElement from nativeElement 
    var hElement: HTMLElement = this.elRef.nativeElement; 

    //now you can simply get your elements with their class name 
    var allDivs = hElement.getElementsByClassName('foo'); 

    //do something with selected elements 
    console.log(allDivs); 
    } 
} 

Working Plunker

Düzenleme: Ben amaç burada hızlı demo için jQuery kullanılmalıdır. Aksi halde, Angular ile jQuery kullanmamalısınız.

+0

@Downvoter: açıklamak ister misiniz? –

+1

Yapmanızın önerilmediği bir şey için bir kod demosu eklememelisiniz, bunun yanı sıra jQuery'yi kullanarak bahsetmediğiniz sorusunun yanında. – wrldbt

+0

@wrldbt: "* hızlı demo" * " –