저는 현재 Angle js 프로젝트를 진행하고 있습니다. 오늘 아침 내내 벌레 때문에 걱정이었는데
즉, ng-if에 팝업 상자가 나타납니다. 팝업 상자의 지시 사항은 템플릿에 스크립트가 있지만 IE8에서는 스크립트가 실행되지 않습니다. .
script 태그에 defer 속성을 추가하는 등 IE8에서 스크립트 실행과 관련된 많은 문제를 확인했지만 실제 문제는 해결되지 않았습니다.
나중에 알고 보니 스크립트를 실행할 수 없는 것이 아니라 메인 페이지가 로드될 때 스크립트가 실행된 것이었습니다(ng-if가 false이고 팝업 상자가 나타나지 않았습니다).
인터넷에서는 ng-if가 dom을 제거하고 dom을 생성하는 반면 ng-show는 표시 속성만 변경한다고 합니다.
ng-if="true"가 설정될 때까지 DOM을 로드하지 않고 스크립트를 실행하면 안 되는 이유가 무엇입니까?
그런데 ng-if를 ng-show로 변경한 후 갑자기 문제가 해결된 것을 발견했습니다. IE8에서는 팝업 상자를 완벽하게 클릭한 후 스크립트가 실행되었습니다.
왜 이런 일이 일어나는지 이해가 안 돼요. 누가 말해 줄 수 있나요?
버그를 해결하는 방법을 모르겠습니다. 각도 분석 과정에 대해 설명할 수 있습니다.
DOM 뷰어에서 보는 것은 Angle 파싱 후의 결과이지만, 브라우저는 실제로 dom 요소를 먼저 로드한 다음 Angle이 이를 실행하여 다양한 명령을 찾은 다음 결과를 파싱합니다.
Angular에는 몇 가지 단점이 있습니다. ng-bind는 중괄호 깜박임 문제를 해결하기 위해 {{ 표현식 }}을 대체하고 href 지침을 정의하여 태그에 사용할 수 없으며 다른 유사한 이유도 동일합니다.
ng는 배경 템플릿이 아닙니다. 배경 언어의 경우 템플릿은 다양한 문자열 구문 분석 및 접합이지만 ng는 브라우저에서 실행됩니다. ng는 문자열을 조작하는 것이 아니라 dom 요소를 조작하는 것입니다.
ng-if와 ng-show에 바인딩된 컨트롤러 모델이 있어야겠죠?
귀하의 솔루션 프로세스를 살펴보면 다음과 같습니다.
ng-if의 기본값은 true
ng-show의 기본값은 false입니다
따라서 ng-if를 사용하면 모델이 계산되기 전에 템플릿의 스크립트가 실행됩니다
하지만 이는 ie8의 특별한 상황일 수도 있습니다
제안이 있습니다. 스크립트를 템플릿에 직접 넣지 마세요. 예를 들어, ng-if를 이런 방식으로 사용할 수도 있습니다.