2016-02-11 2 views
11

Снято с угловыми документации:Когда использовать двойные фигурные скобки {{}} в angularJS

Angular Expressions
Угловые выражения JavaScript-подобные фрагменты кода, которые в основном помещены в интерполяции привязок, таких как

<span title="{{ attrBinding> }}">{{ textBinding }}</span> 

, но и непосредственно используемые в директиве атрибуты, такие как ng-click="functionExpression()".

Например, они являются допустимыми выражениями в Угловом:

1 + 2 а + б user.name элементы [индекс]

Однако я немного запутался, когда использовать синтаксис двойной фигурной скобки {{}} и когда нет. Документация, по-видимому, предполагает, что вам не нужны они при использовании выражений в атрибутах директивы (см. Пример ng-click выше).

Хотя следующий код, который работает предлагает анекдотические доказательства обратного:

<ul id="Menu"> 
     <li ng-repeat="appModule in applicationModules" id="{{appModule.Name}}" ng-class="{ 'selected' : selectedAppModule == '{{appModule.Name}}' }" ng-click="menuClicked(appModule.Name)"> 
      <a href="#Content/{{appModule.Name}}">{{appModule.Display}}</a> 
     </li> 
    </ul> 

Обратите внимание, как в директиве нг-класса используются двойные фигурные скобки и внутри директивы нг-клик они не являются.

Как вы узнаете, когда их использовать, а когда нет?

+1

вы используете фигурные скобки, когда хотите получить его значение, и вы не используете фигурные скобки, если хотите использовать его как переменную – MayK

ответ

9

Это зависит от соответствующего атрибута директивы и типа привязки, который он использует. Более того, это зависит от того, что вы намерены в данной ситуации.

Из вашего примера:

ng-repeat="appModule in applicationModules" 

Нет необходимости в фигурных скобках, как это выражение оценивается угловой внутри директивы нг-повтора.


id="{{appModule.Name}}" 

Здесь нужны брекеты, как мы хотим, чтобы идентификатор быть равен значением выражения.


ng-class="{ 'selected' : selectedAppModule == '{{appModule.Name}}' }" 

Я уверен, что это может быть записано как:

ng-class="{ 'selected' : selectedAppModule == appModule.Name }" 

И вы получите такое же поведение.


ng-click="menuClicked(appModule.Name)" 

В этом примере нам нужно нг щелчок, чтобы быть связанным с методом имени menuClicked.


Обычно мы используем {{}}, когда мы хотим вычислить выражение и при работе с атрибутами мы не всегда нужно использовать {{}}, поскольку они во многих случаях оценивали за кулисами.

Простой Совет Эмпирическое правило, когда {{}} Необходим, думая о нем, как обертка для .ToString() -метода. Имеет смысл преобразование выражения в строку, то есть с помощью {{}}. (Любые примеры счетчиков очень приветствуются)

+0

Благодарим вас за подробный ответ, который имеет смысл. Вы также были правы относительно класса ng, который он работает, используя переменную вместо буквенного значения. –

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