2013-05-15 1 views
2

Возможно, лучше всего проиллюстрировать мой вопрос на примере.Есть ли способ оценить выражение AngularJS в шаблоне только один раз (т. Е. Без привязки данных)?

Вот шаблон фрагмент:

<div class="title">{{action}} Location</div> 

двойной фигурная разметки говорит AngularJS оценить action от текущей области И создать привязку данных к action.

Есть ли способ сказать AngularJS оценить action один раз и сделать (т.е. мне не нужны привязки данных/часы)?

+1

Downvoted без причина? Серьезно, я думаю, что SO должно заставить людей оставить свои причины, когда они понижают рекламу. – tamakisquare

ответ

3

Я нашел Pasvaz's bindonce module, другое решение, которое лучше подходит для моей потребности, от углового списка рассылки.

UPDATE 10/27/2014: Начиная с v1.3, AngularJS ядро ​​поддерживает one-time binding

4

Невозможно найти прямую опору interporate once функция в угловом. Но вы можете легко обойти его, используя отдельную переменную, которая получает один раз и не изменяется после этого.

В контроллере:

$scope.action0 = action; 

в шаблоне:

<div class="title">{{action0}} Location</div> 

EDIT: Другой способ определить директиву, которая интерполирует раз и оставить его в покое.

http://plnkr.co/edit/6Ul1QgqhNH0bqK2af2Jo?p=preview

ЯШИ:

app.directive('staticBind', function(){ 
    return function(scope, elem, attrs) { 
    elem.text(scope[ attrs.staticBind ]); 
    }; 
}); 

шаблон:

<span static-bind="variable"></span> 
+0

Мое намерение состоит в том, чтобы сэкономить ресурсы, избегая автоматического создания часов на 'action'. Всякий раз, когда используется двойная курчавая разметка, '{{expression}}', AngularJS автоматически создает часы на любом выражении, определенном в разметке, и этого я хочу избежать. Поэтому ваше решение не отвечает на мой вопрос. – tamakisquare

0

Используйте angular.copy при установке рамки, которые будут использоваться в этом шаблоне. Угловое не смотреть на var, установленное на копию. angular.copy используется для хранения значения текущего значения watchExpression для последующего сравнения.

+0

Заботьтесь о своем решении?Возможно, быстрая демонстрация с использованием jsFiddle или plunker. – tamakisquare

+0

Несомненно. http://jsfiddle.net/VLQfz/ – Jason

+0

это определенно не работает. Попробуйте запустить демо-код на локальной машине и проверьте '$ ('div'). Eq (0) .scope(). $$ watchers', вы можете видеть, что есть два наблюдателя, по одному для каждого' ng-repeat'. Я до сих пор не понимаю вашу точку зрения. – tamakisquare

2

Я столкнулся с той же проблемой. Я хочу оценить выражение, но я не хочу его отображать. поэтому я нашел одно решение, просто положить выражение, которое вы хотите оценить в нг скрывать DIV и множество нг скрытия лжи, как

<div ng-hide="true">{{your expression here}}</div> 

будет исполнять выражение без отображения содержимого,

Смежные вопросы