Sto cercando di aggiornare un'app Angular 1 su Angular 2 e sto avendo un problema con una delle mie vecchie direttive.Angular2 evento di attivazione per aggiungere la classe
L'idea è semplice. Quando un campo di input è focalizzato, è necessario aggiungere una classe (md-input-focus) e un'altra (md-input-wrapper). Quindi questo processo dovrebbe essere invertito in caso di "sfocatura" - cioè messa a fuoco persa.
mia vecchia direttiva incluso semplicemente le linee
.directive('mdInput',[
'$timeout',
function ($timeout) {
return {
restrict: 'A',
scope: {
ngModel: '='
},
link: function (scope, elem, attrs) {
var $elem = $(elem);
$elem.on('focus', function() {
$elem.closest('.md-input-wrapper').addClass('md-input-focus')
})
.on('blur', function() {
$(this).closest('.md-input-wrapper').removeClass('md-input-focus');
})
}
ecc ...
ho, ovviamente, il classico per iniziare la mia direttiva, ma sono a corto di ..... abilità
import {Directive, ElementRef, Renderer, Input} from 'angular2/core';
@Directive({
selector: '.mdInput',
})
export class MaterialDesignDirective {
constructor(el: ElementRef, renderer: Renderer) {
// Insert inciteful code here to do the above
}
}
Qualsiasi aiuto sarebbe apprezzato.
UPDATE:
Il codice HTML sarà simile (prima l'elemento di input è concentrata):
<div class="md-input-wrapper">
<input type="text" class="md-input">
</div>
e poi
<div class="md-input-wrapper md-input-focus">
<input type="text" class="md-input">
</div>
dopo.
L'elemento di ingresso è l'unico che può ricevere un evento fuoco (e quindi l'obiettivo per la direttiva), tuttavia il genitore <div>
richiede l'aggiunta di classe e la rimozione.
Aiuto ulteriore
Please see Plunker for help/explanation - sarebbe bello se qualcuno potrebbe aiutare
Capisco la logica del codice di Gunter ma penso che non lo fa abbastanza in forma. La classe dovrebbe essere aggiunta all'elemento genitore. HTML:
Ok, ma il genitore non è il componente genitore, ma il tag principale? In questo caso avresti bisogno di 'ElementRef'. Non c'è 'closest()' in Angolare. Vorresti comunque usarlo o è solo ".parentElement" ok? –
Ho aggiornato la mia domanda per mostrare l'HTML a cui deve essere collegata la direttiva nel caso in cui aiuti :) –