현재 AngularJS에 대해 slide menu directive을 개발 중입니다. javacript는 세 가지 유형의 지시문으로 구성됩니다. 각 유형의 슬라이딩 메뉴에 대한 지시문 (간결함을 위해 왼쪽 슬라이딩 메뉴 만 포함), 나머지 화면에 대한 하나의 래퍼 지시문 asmWrapper 및 하나의 제어 버튼 지시문 asmControl. 현재 이러한 지침은 모두 asmService과 통신하는 서비스를 사용하고 있습니다.ng-class가 맞춤 지침에서 트리거되지 않습니다.
사용자가 asmControl을 클릭하면 해당 지시어의 컨트롤러는 어떤 메뉴가 트리거되었는지를 결정하는 asmService의 메소드를 호출하고 $ rootScope에서 'asmEvent'를 내 보냅니다. asmSlidingMenu의 컨트롤러는 해당 이벤트를 잡아서 해당 범위의 활성 변수를 업데이트하지만 DOM 요소의 CSS 클래스는 변경되지 않습니다.
ng-class이 설정되어 있지 않다고 가정합니다. 이 문제를 어떻게 해결할 수 있습니까?
아래에 asmSlidingMenu 지시문의 코드가 포함되었습니다. 좀 더 완벽한 예를 보려면 Plunker을보십시오. 모든 active
의
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) {}
}
}
}
}]);
정말 고마워요! 그것은 완벽하게 작동했습니다. – Elzair
ng-class가있는 요소가 지시문 요소 외부에 있으면 어떻게됩니까? 물론 할 수 있습니다 : angle.element (document.getElementById ('id')). addClass ('someclass')하지만 전체적인 아이디어는 양각으로 데이터를 바인딩하는 것입니다. HTML 요소 자체에 대한보기에서 클래스 이름을 사용하는 것이 훨씬 더 좋습니다. 더 읽기 쉽습니다. – Skychan
@Skychan 당신의 요점은 무엇입니까? – zeroflagL