2015-07-20 5 views
2

Знаем, что при определении области действия в директиве «@» означает строку и «=» означает двустороннюю привязку. Что означает «&»?AngularJS - Пользовательская директива Область «&» делать?

Вот бы пример директивы:

angular.module('NoteWrangler') 
.directive('nwCard', function() { 
    return { 
    restrict: 'E', 
    templateUrl: './templates/directives/nw-card.html', 
    scope: { 
     header: '@', 
     description: '=', 
     tweeted: '=' 
    }, 
    link: function(scope, element, attrs){ 
     if(scope.tweeted) 
     element.addClass('tweeted'); 
    } 
    }; 
}); 
+2

http://stackoverflow.com/questions/14908133/what-is-the-difference-between-vs-and-in-angularjs –

ответ

2

Проще говоря, & должен пройти в function или handler к директиве. Хорошей стартовой точкой является AngularJS Developer Guide.

Вот очень простой пример (JSFiddle):

angular.module('Joy', []) 
    .controller('MyCtrl', ['$scope', function ($scope) { 
     $scope.addition = function (v1, v2) { 
      console.log(v1, v2); 
      return v1 + v2; 
     }; 
}]) 
    .directive('passMeContrller', [function() { 
    return { 
     restrict: 'A', 
     scope: { 
      add: '&', 
     }, 
     template: '<div>{{ add({v1: 2, v2: 4}) }}</div>' 
    }; 
}]); 

HTML является:

<div ng-app="Joy" ng-controller="MyCtrl"> 
    <div pass-me-contrller add="addition(v1, v2)"></div> 
    <hr> 
</div> 

Пожалуйста, отметил, что в шаблоне директивы, параметры функции должны быть {v1: 2, v2: 4}. Это объект, который будет декодирован с помощью углового и передан в функцию контроллеров addition.

Для справки: Pass callback function to directive

+0

Я немного запутался " {v1: 2, v2: 4} '. Это просто установить значение по умолчанию для вывода? Когда я делаю «шаблон:«

{{ add() }}
»« директива кажется нормально работать, если я иду «
» с реальными цифрами – HelpMeStackOverflowMyOnlyHope

+0

Да, вы правы. Здесь '{v1: 2, v2: 4}' соответствует двум аргументам функции 'add'. Конечно, «дополнение (1, 2)» работает хорошо, но в этом случае взаимодействие между директивой и внешним контроллером отсутствует. Пример здесь показывает, что вы можете передавать параметры ** внутри ** директивы. – Joy

+0

А, ок. Большое спасибо за разъяснение. Поэтому в моей директиве я мог бы иметь отдельный контроллер, который вычисляет что-то и добавляет его в директивы, изолируя область, а затем передает это функции, которая была передана родителем. Вот пример для других: http://jsfiddle.net/9L07epkv/5/ – HelpMeStackOverflowMyOnlyHope

4

Так &, @, = определить как отношения работают вместе для того, как изоляция сфера должна работать

@: текстовое представление

=: двух- двустороннее связывание => позволяет вам манипулировать данными

&: это манипуляция родительской областью с передаваемым значением. Его обычно используют для передачи функции родительской области до директивы.

& очень трудно объяснить в тексте, но эта ссылка здесь провожал через него: https://egghead.io/lessons/angularjs-isolate-scope-expression-binding

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