AngularJS için şu anda bir slide menu directive geliştiriyorum. Javascript üç tip direktiften oluşur: her kayan menü tipi için direktifler (kısırlık için sadece sol kayan menüyü dahil ettim), ekranın geri kalanı için bir sarıcı yönergesi, asmWrapper ve bir kontrol düğmesi yönergesi, asmControl. Şu anda, bu yönergelerin tümü iletişim kurmak için asmService hizmetini kullanıyor. Kullanıcı bir asmControl tıklattığında, bu yönergenin denetleyicisi, hangi menünün tetiklendiğini belirleyen ve $ rootScope'ta bir 'asmEvent' gönderen asmService yöntemini çağırır. asmSlidingMenu 'un denetleyicisi bu olayı yakalayacak ve etkin değişkeni kendi kapsamı içinde güncelleyecektir, ancak DOM öğesinin CSS sınıfı değişmeden kalır.ng sınıfı, özel yönergede tetiklenmeyecek
ng sınıfı ayarlanmıyor. Bunu nasıl düzeltirim?
Aşağıdaki asmSlidingMenu yönergesinin kodunu ekledim. Daha eksiksiz bir örnek görmek için, yaptığım Plunker'u görüntüleyin. Tüm active
ait
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) {}
}
}
}
}]);
Çok teşekkür ederim! Bu mükemmel çalıştı. – Elzair
Eğer ng sınıfı olan elementiniz yönerge elemanının dışında var ise? Yapabilirsin: angular.element (document.getElementById ('id')). AddClass ('someclass') ama tüm fikir, açısal ile iki yönlü veri bağlama sahip olmaktır. Html öğesinin kendisinde, görünümde sınıf adına sahip olmak çok daha güzel. Daha okunabilir. – Skychan
@Skychan Ne demek istiyorsun? – zeroflagL