2016-04-11 8 views
0

Ich möchte ElementRef backToTopTarget an die Direktive .back-to-top übergeben. Allerdings kann ich es nicht mit ngOnChangesÜbergeben Sie die lokale Variable an die Direktive als Eingabe

<section #backToTopTarget> 
    <section class="back-to-top" [target]="backToTopTarget"> 
     Back to top <i class="fa fa-angle-up"></i> 
    </section> 
</section> 

/// <reference path="../../../typings/angular2.d.ts" /> 

import {Directive, Input, OnChanges, ElementRef} from 'angular2/core'; 
import {BaseComponent} from "../../BaseComponent/BaseComponent"; 

@Directive({ 
    selector: '.back-to-top', 
}) 
export class BackToTop implements OnChanges { 
    private $el; 
    @Input('target') private target; 
    private $target; 

    constructor(private el: ElementRef) { 
     this.$el = $(this.el.nativeElement); 
    } 

    ngOnChanges({target}) { 
     // target.currentValue === undefined 
    } 
} 

bekommen So kann ich nicht oder etwas, das ich es falsch mache?

Antwort

1

check plunker it works

ngOnChanges(...args:any[]) 
{ 
    console.log(args[0].target); // according to my plunker code 
} 
+0

Nein, es nur ein Argument ist, JSON wie folgt lautet: '{ "Ziel": { "previousValue": {}}}' – tom10271

+0

Bitte prüfen und implementieren. Ich bin sicher, dass Sie Ihren 'target' Wert innerhalb von' args' haben werden. – micronyks

+0

Haben Sie einen Standardwert für 'backToTopTarget'? Es muss funktionieren was ist falsch? – micronyks

1

Ich bin mir nicht sicher, was $(this.el.nativeElement) tun soll.

Dies funktioniert gut für mich:

@Directive({ 
    selector: '.back-to-top', 
}) 
export class BackToTop implements OnChanges { 
    private $el; 
    @Input() private target; 
    private $target; 

    constructor(private el: ElementRef) { 
     this.$el = this.el.nativeElement; 
    } 

    ngOnChanges(changes) { 
     console.debug(this.target); 
     // outputs `<section></section>` 
    } 
} 

@Component({ 
    selector: 'my-app', 
    directives: [BackToTop], 
    template:` 
<section #backToTopTarget> 
    <section class="back-to-top" [target]="backToTopTarget"> 
     Back to top <i class="fa fa-angle-up"></i> 
    </section> 
</section> 
    `, 
}) 
export class App { 
} 

Plunker example