最近在做一个angular js的项目。今早一个早上都在为一个bug发愁,、
就是ng-if出现一个弹框,弹框的指令中引用了一个模板,模板中有script脚本,在其他浏览器都没问题,就是在IE8下脚本不执行。
查了很多IE8执行脚本的问题,包括在script标签加defer属性,但是不解决实际问题。
后来发现并不是脚本不能执行,而是在主页面加载时(ng-if为false弹框没出现)就执行过了脚本。
网上都说 ng-if会移除dom,生成dom,而ng-show只是改变其display属性,
按理说不应该是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를 이런 방식으로 사용할 수도 있습니다.