Attualmente sto sviluppando uno slide menu directive per AngularJS. Il javascript è costituito da tre tipi di direttive: le direttive per ciascun tipo di menu scorrevole (per brevità includo solo il menu scorrevole sinistro), una direttiva wrapper per il resto dello schermo, asmWrapper e una direttiva del pulsante di controllo, asmControl. Attualmente tutte queste direttive utilizzano un servizio, asmService per comunicare.ng-class non si attiva sulla direttiva personalizzata
Quando l'utente fa clic su asmControl, il controller di quella direttiva chiama un metodo su asmService che determina quale menu è stato attivato ed emette un 'asmEvent' su $ rootScope. Il controller asmSlidingMenu catturerà quell'evento e aggiornerà la variabile attiva nel suo ambito, ma la classe CSS dell'elemento DOM rimane invariata.
Suppongo che la classe ng non sia impostata. Come posso risolvere questo?
Ho incluso il codice per la direttiva asmSlidingMenu di seguito. Per vedere un esempio più completo, visualizza lo Plunker che ho creato.
slideMenu.directive('asmSlideLeft', ['$rootScope', 'asmService',
function($rootScope, asmService) {
return {
restrict: 'AEC'
, scope: {}
, controller: function($scope) {
$rootScope.$on('asmEvent', function(event, prop) {
console.log('Intercepted: ' + asmService.asmStates.slideLeft.active);
$scope.active = asmService.asmStates.slideLeft.active;
});
}
, compile: function(element, attrs) {
attrs.$set('class', 'asm asm-horizontal asm-left');
attrs.$set('data-ng-class', '{"asm-left-open: active"}');
return {
pre: function preLink(scope, iElement, iAttrs) {}
, post: function postLink(scope, iElement, iAttrs) {}
}
}
}
}]);
Grazie mille! Ha funzionato perfettamente. – Elzair
Cosa succede se il tuo elemento che ha ng-class esiste al di fuori dell'elemento direttivo? Certo che puoi fare: angular.element (document.getElementById ('id')). AddClass ('someclass') ma l'idea generale è quella di avere un bind di dati bidirezionale con angolare. È molto più bello avere il nome della classe nella vista - sull'elemento html stesso. Più leggibile – Skychan
@Skychan Qual è il tuo punto? – zeroflagL