2016-04-06 14 views
6

Mam podstawowy element:dynamicznie dołączyć dziecko z dyrektywą

<div> 
    I'm a basic element 
</div> 

Chcę utworzyć dyrektywę, która pozwala mi napisać to:

<div resizable-top> 
    I'm a basic element 
</div> 

i czyni to:

<div resizable-top> 
    <div> drag me to resize element </div> 
    I'm a basic element 
</div> 

Zasadniczo stworzyłem dyrektywę:

@Directive({ 
    selector: '[resizable-top]', 
    host: { 
     '(mousedown)':'onMouseDown()', 
     '(mousemove)':'onMouseMove()', 
     '(mouseover)':'onMouseOver()' 
    } 
}) 
export class ResizableDirective{ 

    constructor(private el:ElementRef){ 
    } 

    onMouseDown(){ 
     //TODO 
    } 

    onMouseMove(){ 
     //TODO 
    } 

    onMouseOver(){ 
     //TODO 
    } 
} 

Problem polega na tym, że nie wiem, jak utworzyć element potomny za pomocą el i chcę, aby zdarzenia były wiązane na elemencie potomnym, a nie na rzeczywistym elemencie.

Od jest typu any Nie mogę dowiedzieć się, jakie metody/właściwości mogę użyć, aby osiągnąć to, co chcę.

Odpowiedz

6

el.nativeElement zwraca HTMLElement jeśli selektor zawiera - przeciwnym razie HtmlUnknownElement

kątowej ze sposobów jest użycie klasy Renderer w połączeniu z ElementRef tak.

constructor(private el:ElementRef, private renderer:Renderer){ 
} 

i użyj dostarczonej metody.

Dzięki temu aplikacja WebWorker i renderowanie po stronie serwera jest bezpieczne.

+0

Renderer jest naprawdę przydatny, ale tworzenie elementu jest uzupełnieniem widoku do widoku, czy istnieje sposób, aby go zastąpić? – Supamiu

+0

W zależności od czego? Przygotuj się na 'el'? Do tego potrzebowałbyś czegoś takiego jak 'el.nativeElement.parentNode.insertBefore (newChild, el.nativeElement)'. Nie sądzę, że można to zrobić z rendererem. –

+0

Mam na myśli, że jeśli mam '

' Chcę dodać mój nowy element w pierwszym dziale, przed dzieckiem: '
Here
' zamiast po dziecko. – Supamiu

Powiązane problemy