활성 링크를 강조 표시하는 또 다른 지시문이 있습니다.
주요 특징들:
- 동적 각도 표현식을 포함하는 href와 잘 작동합니다.
- 해시 뱅 내비게이션과 호환
- 링크 자체가 아닌 상위 클래스에 활성 클래스를 적용해야하는 부트 스트랩과 호환
- 중첩 된 경로가 활성화 된 경우 링크를 활성화 할 수 있습니다
- 링크가 활성화되어 있지 않으면 링크를 비활성화 할 수 있습니다
암호:
.directive('activeLink', ['$location',
function($location) {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
var path = attrs.activeLink ? 'activeLink' : 'href';
var target = angular.isDefined(attrs.activeLinkParent) ? elem.parent() : elem;
var disabled = angular.isDefined(attrs.activeLinkDisabled) ? true : false;
var nested = angular.isDefined(attrs.activeLinkNested) ? true : false;
function inPath(needle, haystack) {
var current = (haystack == needle);
if (nested) {
current |= (haystack.indexOf(needle + '/') == 0);
}
return current;
}
function toggleClass(linkPath, locationPath) {
// remove hash prefix and trailing slashes
linkPath = linkPath ? linkPath.replace(/^#!/, '').replace(/\/+$/, '') : '';
locationPath = locationPath.replace(/\/+$/, '');
if (linkPath && inPath(linkPath, locationPath)) {
target.addClass('active');
if (disabled) {
target.removeClass('disabled');
}
} else {
target.removeClass('active');
if (disabled) {
target.addClass('disabled');
}
}
}
// watch if attribute value changes / evaluated
attrs.$observe(path, function(linkPath) {
toggleClass(linkPath, $location.path());
});
// watch if location changes
scope.$watch(
function() {
return $location.path();
},
function(newPath) {
toggleClass(attrs[path], newPath);
}
);
}
};
}
]);
용법:
각도 표현을 사용한 간단한 예에서 $ scope.var = 2 라고 말한 다음 location이 / url / 2 인 경우 링크가 활성화됩니다 .
<a href="#!/url/{{var}}" active-link>
부트 스트랩 예제, 부모 li은 활성 클래스를 얻습니다.
<li>
<a href="#!/url" active-link active-link-parent>
</li>
중첩 된 URL의 예, 중첩 된 URL이 활성화 된 경우 링크가 활성화됩니다 (예 : / url / 1 , / url / 2 , url / 1 / 2 / ... )
<a href="#!/url" active-link active-link-nested>
복잡한 예에서 링크는 한 URL ( / url1 )을 가리 키지 만 다른 URL ( / url2 )을 선택하면 활성화됩니다 .
<a href="#!/url1" active-link="#!/url2" active-link-nested>
링크가 비활성화 된 예, 활성화되어 있지 않으면 '비활성화' 클래스가됩니다.
<a href="#!/url" active-link active-link-disabled>
모든 active-link- * 속성은 어떤 조합으로도 사용할 수 있으므로 매우 복잡한 조건을 구현할 수 있습니다.