2016-10-04 2 views
1
export class AppComponent { 
    title = 'Dashboard'; 
    navbarmenu = NAVBAR; 

    constructor(router:Router){ 
    router.events.subscribe((event: NavigationEvent) => { 
     if(document.querySelector('.a-active')) document.querySelector('.a-active').classList.remove('a-active'); 
    }); 

    setTimeout(() => { 
     let testTry = document.querySelector('.submenu li a.is-active'); 

     if(testTry){ 
     let anchor = testTry.parentNode.parentNode.parentNode.children[0]; 

     // anchor is a node and throwing an error. 

     anchor.classList.add('a-active'); 
     } 
    } 
    } 
} 

오류 : 부동산의 'classList는'유형에 존재하지 않는 '노드'Angular2 반환 노드 대신 요소

이의 setTimeout 기능을 주석되지 않은 경우 내 서버를 시작할 수 없습니다. 그러나 서버가 실행 중이고 주석을 제거하는 경우. 제대로 실행되지만 여전히 오류가 발생합니다.

감사합니다. 어떤 도움을 주시면 감사하겠습니다.

답변

1
setTimeout(() => { 
    let isActive = document.querySelector('.submenu li a.is-active') 

    if(isActive) isActive.closest('ul').closest('li').children[0].classList.add('a-active') 
}) 

이 해결 방법을 사용해보십시오! 왜 노드를 반환하는지 모르겠습니다. 일반 자바 스크립트에서는 코드가 작동해야합니다. 타이프 스크립트의 버그 일 수 있습니다.

Polyfill : https://stackoverflow.com/a/24107550/6741739 또는

https://github.com/jonathantneal/closest가 작동 아닌지 알려드립니다.

+0

감사합니다. 그것은 매력처럼 작동했습니다. –