Angularjs устанавливает значения по умолчанию для отображения перед оценкой
Я использовал angularJs для действительно простых функций на существующем сайте.
это что-то вроде этого
<div ng-app>
<div ng-controller="TermsController">
<input type="checkbox" ng-model="terms.agree" />
<input type="submit" value="{{terms.label}}" .. />
</div>
</div>
Я подключаю angular к середине страницы, и все работает нормально, за исключением того, что angular загружается довольно медленно, и пользователь может увидеть {{terms.label}} на мгновение, прежде чем angular оценит его значение.
Я попытался сделать что-то вроде
<input type="submit" value="Default value" ng-model="terms.label" .. />
но он никогда не обновляет значение кнопки отправки. во всяком случае, я бы поспорил, что видел что-то вроде этого, но, возможно, поле ввода было без атрибута value и только модели.
любое руководство по настройке шаблона перед загрузкой angularJs оценено.
Я знаю, что я могу установить некоторый preloader и заменить его после загрузки angular, но для этой простой задачи это кажется излишним.
спасибо за помощь
Ответы
Ответ 1
Лучшее, что вы можете сделать с существующей версией AngularJS, - это ng-bind. Из документации:
Один раз сценарий, в котором использование ngBind предпочтительнее {{ выражение}}, когда желательно установить привязки в шаблон, который на мгновение отображается браузером в его исходном состоянии перед Angular скомпилирует его. Поскольку ngBind является атрибутом элемента, он делает привязки невидимыми для пользователя во время загрузки страницы.
Чтобы сделать работу ng-bind
в вашем случае, вам нужно будет поменять тег input
на тег button
следующим образом:
<div ng-controller="TermsController">
<input type="checkbox" ng-model="terms.agree">
<button type="submit" ng-bind="terms.label">Before</button>
</div>
Вот рабочий jsFiddle: http://jsfiddle.net/TL33r/2/
Вы можете использовать ng-cloak
(см. еще один вопрос для получения дополнительной информации), но ng-cloak
скроет весь элемент DOM (и его дочерние элементы), пока я считаю, что вы попросили получить значение "по умолчанию", которое будет заменено на привязку, когда выйдет "AngularJS".
Ответ 2
Вы можете скрыть элемент с атрибутом ng-cloak
во время загрузки:
<div ng-app>
<div ng-controller="TermsController" ng-cloak>
<input type="checkbox" ng-model="terms.agree" />
<input type="submit" value="{{terms.label}}" .. />
</div>
</div>
Ссылка: http://docs.angularjs.org/api/ng.directive:ngCloak