Подтвердить что ты не робот

Стратегия AngularJS для предотвращения неактивного содержимого для класса

У меня есть проект AngularJS, я хочу предотвратить FOUC во время загрузки страницы на имя класса. Я читал о ng-шаблоне, но это кажется полезным только для содержимого внутри тега.

<body class="{{ bodyClass }}">

Я бы хотел, чтобы это было "login" на загрузке страницы. Любая стратегия для этого? Или мне просто нужно выманить его и загрузить его как "логин" и вручную использовать javascript для настройки DOM только для этого экземпляра.

4b9b3361

Ответ 1

То, что вы ищете, это ng-cloak.
Вы должны добавить его следующим образом:

<body class="{{ bodyClass }}" ng-cloak>

и это предотвратит нежелательное мигание.
Ссылка на документы об этом

Edit:
Также рекомендуется поместить сниппет ниже в ваш файл CSS, согласно документам.

"Для достижения наилучшего результата в голову должен быть загружен angular.js scriptраздел html-документа; в качестве альтернативы, правило css выше должно быть включенным во внешнюю таблицу стилей приложения."

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

Ответ 2

Одна из проблем, с которыми вы сталкиваетесь, заключается в том, что браузер отобразит элемент <body> до того, как AngularJS загрузится и начнет манипулировать DOM. То, что другие люди говорили о ng-class, правильно, оно будет применять нужный класс, но вам все равно нужно ничего не показывать до того, как Angular готов.

В предыдущих версиях Angular вы могли бы сделать это:

<body style="display:none" ng-show="true" ng-class="{{bodyClass}}">

В последних версиях это не работает, потому что ng-show делает видимость, добавляя и удаляя класс ng-hide (который менее специфичен, чем атрибут элемента)

То, что я делал недавно, следующее:

<head>
...
    <style> <!-- Or you could include this in an existing style sheet -->
        .ng-cloak {
            display: none !important;
        }
    </style>    
</head>
<body class="ng-cloak" ng-cloak ng-class="{{bodyClass}}">

Выполнение этого способа означает, что <body> будет немедленно скрыт стилем для класса ng-cloak. Когда Angular запускается, он обрабатывает все директивы, включая ng-class и ng-cloak, поэтому ваш элемент <body> будет иметь правильный класс и будет видимым.

Подробнее здесь директива ng-cloak

Ответ 3

Существует решение проблемы со вспышкой в ​​простой CSS, которая является пуленепробиваемой. Для класса корневого элемента приложения добавьте следующее. Это решение работает по порядку обработки: все скрыто в CSS, загружается angular, а затем CSS показывает корень приложения. Мне нравится использовать это, если на странице, которую они будут отображать, будут другие элементы angular, чтобы страница быстрее загружалась.

/* in your CSS file in head */
.myApp {
    display:none;
}

<div class="myApp" ng-app="myApp"></div>

Как раз перед концом тела добавьте ссылки script и некоторые встроенные CSS:

<script language="javascript" type="text/javascript" src="angular.min.js"></script>
<style>
.myApp {
    display:block;
}
</style>
</body>

Ответ 4

Вместо использования класса вы должны использовать ng-class

<body ng-class="{{ bodyClass }}">

Ответ 5

Я заметил, что иногда даже ng-плащ действительно не работает. Может быть, я делаю что-то неправильно.

<body ng-cloak class="{{ bodyClass }}">

Я также делаю еще одну маленькую вещь, похожую на @mbokil, которую вы можете скрыть элемент по умолчанию. Используя селектор атрибутов, предназначенный для любых элементов с атрибутом ng-cloak, вы можете использовать директивы angular. Это имеет несколько преимуществ, но основное преимущество - когда-то angular срабатывает, он удаляет этот атрибут, который вызывает перерисовку.

<style>
  [ng-cloak] {
    display:none;
  }
</style>