현재 응용 프로그램의 DOM 변경에 대한 지시문을 사용하고 있습니다. 나는 상태 변경을 숨기기 위해 요소의 버튼을 원합니다.AngularJS 지시어는 요소의 자식에 대한 클래스 또는 스타일 변경이 적용되지 않는 이유는 무엇입니까?
HTML :
이<div account layout="row" layout align="start center">
<md-button id="accountIcon" class="md-icon-button">
<md-icon aria-label="account" layout-align="center center">
<i class="material-icons">account_circle</i>
</md-icon>
</md-button>
지침 :
angular.module("app")
.directive('account', ($document) => {
return {
restrict: 'A',
link: (scope, element, attrs) => {
scope.$on('hideAccount',() => {
angular.element($document[0].querySelector('#accountIcon')).addClass('ng-hide);
});
}
};
});
이벤트가 수신되고 기능이 시작됩니다. 다음도 은가 작동하지 않습니다.
.hide {
display: none;
}
는 희망 당신은 요점을 얻을 :
angular.element(document.querySelector('#accountIcon')).addClass('ng-hide');
angular.element(document.querySelector('#accountIcon')).css('display', 'none');
angular.element(document.querySelector('#accountIcon')).addClass('hide');
var accountIcon = element.children()[0];
accountIcon.addClass('ng-hide');
. 분명히 있지만, 곧 추가 더 많은 버튼이있을 수 있기 때문에 전체 요소를 숨기기 위해 찾는 게 아니에요
element.addClass('ng-hide')
다음 는 작업을했다. (계정 아이콘이 아님). 도움이나 도움을 준 문서. 고맙습니다.
답장을 보내 주셔서 감사합니다. 당신의 방법은 매력을 발휘했습니다. 지시어를 사용하는 이유는 아이콘이 표시 될 때 여러 아이콘과 논리를 추가하려고하기 때문입니다. 다른 이벤트와 장치가 혼합되어 있기 때문에 논리가 너무 높습니다. 너 무슨 뜻이야?) 나는 또한 이런 유형의 DOM 조작이 지시문에서 최상이라고 믿게 만듭니다. – Max
@Max 어림짐작은 DOM 조작이 있다면 지시어에 있어야하지만, DOM 조작을 전혀 사용하지 않는 것이 좋습니다. _ "ng-class 속성에 너무 많은 경우 (그게 무슨 뜻인지)"_ 아니요, ng-hide 지시어를 의미합니다 (https://docs.angularjs.org/api/ng/directive/ngHide). DOM 조작 없이는 너무 복잡하다고 할 때 조금 의심 스럽습니다. DOM 조작처럼 보이기 때문에 복잡해집니다. 표시 할 내용과 숨길 내용을 지정하는 간단한 모델을 유지한다면 'ng-hide'또는 'ng-show'가 충분해야합니다. – JLRishe