AngularJS - альтернативное использование для изолированных выражений области видимости ("&")

Я знаю "&" Привязка, используемая для передачи метода (выражений) в директивы, изолирует область видимости, поэтому директива сможет выполнять ее при необходимости.

Много раз мне нужно "передать" одно и то же выражение из моего основного контроллера глубиной более одного уровня во вложенную директиву (2-3 уровня). Вот почему самостоятельно, я не люблю использовать "&" для этой цели. Для меня отправка "обратных вызовов" с помощью "=" привязки работают намного лучше. Но это не вопрос.

Вопрос в том:
Зачем я могу использовать "&" в дополнение к прохождению функций? Могу ли я иметь что-то вроде этого: my-directive-click="clickCount +=1"?

2 ответа

& больше о том, чтобы позволить вам иметь дело с выражениями, и что более важно (на мой взгляд) позволяет вам помещать параметры в область видимости вызывающего родителя.

Например, если у вас есть:

scope: {
    something: '&'
} 

а затем в этом шаблоне директив вы можете сделать:

<select ng-model="selection" ng-change="something({$item: selection})" ...>

Вызывающий / пользователь этой директивы может получить элемент ACCESS $ в выражении, переданном somethingт. е. $item помещается в область видимости.

например

<my-dir something="myOwnVar = $item + 1"></my-dir>

Вот пример этого примера, включая цепочку (множественные вложенные вызовы & выражение): http://plnkr.co/edit/j4FCBIx0FVz4OT0w50bU?p=preview

На самом деле, & подразумевается как односторонняя привязка данных.

Так = является двухсторонней привязкой к данным, что означает, что изменения, внесенные в директиву, будут сохраняться в исходном объекте.

@ это просто строка.

А также & особенный. Дело в том, что он создает метод получения вашего значения, в случае вызова функции метод фактически вызывает функцию. Я склонен делать это на DDO:

.directive('myDirective', function() {
  return {
    restrict: 'E',
    scope: {      
      getParameters: '&?params'
    }

Таким образом, значение, связанное с scope является getParameters (так что ясно, это геттер), но на элементе директивы вы будете ссылаться на него только как params:

<my-directive params="ctrl.params">

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

Я надеюсь, что это помогло.

Другие вопросы по тегам