[javascript] Angularjs-ng-cloak / ng-show 요소가 깜박임

angular.js에서 지시문 / 클래스 ng-cloak또는에 문제가 ng-show있습니다.

Chrome은 정상적으로 작동하지만 Firefox에서 ng-cloak또는 의 요소가 깜박입니다 ng-show. IMHO는 ng-cloak/ ng-show로 변환하여 발생 style="display: none;"합니다. 파이어 폭스 자바 스크립트 컴파일러는 약간 느려서 요소가 잠시 동안 나타난 다음 숨겨져 있습니까?

예:

<ul ng-show="foo != null" ng-cloak>..</ul>



답변

설명서에 언급되어 있지 않지만 display: none;CSS에 규칙을 추가하는 것만으로는 충분하지 않을 수 있습니다 . 당신이 몸에 로딩 angular.js 또는 템플릿을 사용, 곧 컴파일되지 않습니다 경우에 ng-cloak지시를 하고 당신의 CSS에 다음을 포함한다 :

/*
  Allow angular.js to be loaded in body, hiding cloaked elements until
  templates compile.  The !important is important given that there may be
  other selectors that are more specific or come later and might alter display.
 */
[ng\:cloak], [ng-cloak], .ng-cloak {
  display: none !important;
}

의견에서 언급했듯이이 !important것이 중요합니다. 예를 들어 다음과 같은 마크 업이있는 경우

<ul class="nav">
  <li><a href="/foo" ng-cloak>{{bar}}</a></li>
</ul>

를 사용 bootstrap.css하는 경우 다음 선택기가 ng-cloak‘ed 요소에 더 구체적입니다.

.nav > li > a {
  display: block;
}

따라서 단순히을 사용하여 규칙을 포함하면 display: none;Bootstrap의 규칙이 우선하고 display가로 설정되어 block템플릿이 컴파일되기 전에 깜박임을 볼 수 있습니다.


답변

으로 문서에 언급 , 당신은에 기초 숨기기에 CSS에 규칙을 추가해야 ng-cloak속성 :

[ng\:cloak], [ng-cloak], .ng-cloak {
    display: none;
}

“Built with Angular”사이트에서 비슷한 트릭을 사용하는데, Github에서 소스를 볼 수 있습니다 : https://github.com/angular/builtwith.angularjs.org

희망이 도움이됩니다!


답변

AngularJS가 headHTML에 포함되어 있는지 확인하십시오 . ngCloak 문서를 참조하십시오 :

최상의 결과를 얻으려면 angular.js 스크립트를 html 파일의 head 섹션에로드해야합니다. 또는 CSS 규칙 (위)을 응용 프로그램의 외부 스타일 시트에 포함시켜야합니다.


답변

나는 ngCloak을 사용하여 운이 없었습니다. 위에서 언급 한 모든 사항에도 불구하고 여전히 깜박 거립니다. 깜박임을 피하는 유일한 확실한 방법은 콘텐츠를 템플릿에 넣고 템플릿을 포함시키는 것입니다. SPA에서 Angular에 의해 컴파일되기 전에 평가되는 유일한 HTML은 기본 index.html 페이지입니다.

몸 안의 모든 것을 가져 와서 별도의 파일에 붙이고 다음과 같이하십시오.

<ng-include src="'views/indexMain.html'"></ng-include>

Angular가 템플릿을 DOM에 추가하기 전에 템플릿을 컴파일하기 때문에 깜박 거리지 않아야합니다.


답변

ngBindngBindTemplate 은 CSS가 필요없는 대안입니다.

<div ng-show="foo != null" ng-cloak>{{name}}</div>  <!-- requires CSS -->
<div ng-show="foo != null" ng-bind="name"></div>
<div ng-show="foo != null" ng-bind-template="name = {{name}}"></div>


답변

ng-cloak을 트리거하는 다른 방법을 사용하는 경우 허용되는 답변 외에도 …

CSS / LESS에 몇 가지 추가 특성을 추가 할 수도 있습니다.

[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
.ng-cloak, .x-ng-cloak,
.ng-hide {
    display: none !important;
}


답변

비슷한 문제가 있었고 전환이 포함 된 클래스가 있으면 요소가 깜박입니다. 성공하지 않고 ng-cloak을 추가하려고했지만 전환을 제거하면 버튼 깜박임이 중지되었습니다.

이온 프레임 워크를 사용하고 있으며 버튼 아웃 라인에 이러한 전환이 있습니다.

.button-outline {
  -webkit-transition: opacity .1s;
  transition: opacity .1s;
}

클래스를 덮어 쓰기하여 전환을 제거하면 버튼 깜박임이 중지됩니다.

최신 정보

다시 이온 성에서는 ng-show / ng-hide를 사용할 때 깜박임이 있습니다. 다음 CSS를 추가하면 해결됩니다.

.ng-hide-add,
.ng-hide-remove {
  display: none !important;
}

출처 : http://forum.ionicframework.com/t/beta-14-ng-hide-show/14270/9