2016-04-11 3 views
0

Хочу передать ElementRef backToTopTarget для директивы .back-to-top. Однако я не могу получить его с ngOnChangesПередача локальной переменной в директиву как вход

<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 
    } 
} 

Так что я не могу или что-то, что я делаю неправильно?

ответ

1

check plunker it works

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

Нет есть только один аргумент, JSON выглядит следующим образом: '{ "цель": { "PreviousValue": {}}}' – tom10271

+0

Пожалуйста, проверьте и выполните. Я уверен, что у вас будет ваше значение 'target' внутри' args' – micronyks

+0

У вас есть значение по умолчанию для 'backToTopTarget'? Он должен работать неправильно? – micronyks

1

Я не уверен, что $(this.el.nativeElement) должен делать.

Это отлично работает для меня:

@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