깜박임 문제를 일으킬 수있는 두 가지 별도의 문제가 실제로 있으며이 중 하나 또는 둘 다에 직면 할 수 있습니다.
문제 1 : ng-cloak이 너무 늦게 적용되었습니다
이 문제는 AngularJS가 헤드에로드되도록하는 것입니다. ngCloak 문서를 참조하십시오 :
최상의 결과를 얻으려면 angular.js 스크립트를 html 파일의 head 섹션에로드해야합니다. 또는 CSS 규칙 (위)을 응용 프로그램의 외부 스타일 시트에 포함시켜야합니다.
문제 2 : ng-cloak가 너무 빨리 제거됨
이 문제는 페이지에 CSS가 많고 서로 연계 된 규칙이 있고 최상위 레이어가 적용되기 전에 CSS의 더 깊은 레이어가 깜박일 때 발생할 수 있습니다.
style="display:none"
요소 를 추가 하는 것과 관련된 답변의 jQuery 솔루션 은 스타일이 충분히 늦게 제거되는 한 (실제로이 두 가지 문제를 모두 해결하는 한)이 문제를 해결합니다. 그러나 HTML에 직접 스타일을 추가하지 않으려면 다음을 사용하여 동일한 결과를 얻을 수 있습니다ng-show
.
질문의 예부터 시작하십시오.
<ul ng-show="foo != null" ng-cloak>..</ul>
요소에 추가 ng-show 규칙을 추가하십시오.
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
( ng-cloak
문제 1을 피해야합니다.)
그런 다음 app.run 세트에서 isPageFullyLoaded
:
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
정확히 무엇을하고 있는지에 따라 app.run이 설정하기 가장 좋은 장소 일 수도 있고 아닐 수도 있습니다 isPageFullyLoaded
. 중요한 것은 isPageFullyLoaded
깜박 거리고 싶지 않은 것이 사용자에게 공개 될 준비가 된 후에 true로 설정되도록하는 것입니다.
것 같은데 문제 (1) 영업 타격하는 문제이지만, 다른 솔루션은 작업을하지 않거나 부분적으로 만 그들이 타격 때문에 작동하는지 발견하고 문제 2를 대신 또는뿐만 아니라.
중요 참고 : ng-cloak을 너무 늦게 적용하고 곧 제거 할 수있는 솔루션을 모두 적용하십시오. 이러한 문제 중 하나만 해결해도 증상이 완화되지 않을 수 있습니다.