Я хочу создать директиву, которая ссылается на атрибут. Атрибут определяет функцию, которая должна быть вызвана в области видимости. Но я также хочу передать аргумент функции, которая определяется внутри функции ссылки.
<div my-method='theMethodToBeCalled'></div>
В функции ссылки я привязываюсь к событию jQuery, которое передает аргумент, который мне нужно передать функции:
app.directive("myMethod",function($parse) {
restrict:'A',
link:function(scope,element,attrs) {
var expressionHandler = $parse(attrs.myMethod);
$(element).on('theEvent',function( e, rowid ) {
id = // some function called to determine id based on rowid
scope.$apply(function() {expressionHandler(id);});
}
}
}
app.controller("myController",function($scope) {
$scope.theMethodToBeCalled = function(id) { alert(id); };
}
Без передачи идентификатора я могу заставить его работать, но как только я пытаюсь передать аргумент, функция больше не вызывается
angularjs-directive
Рекна
источник
источник
Ответы:
Решение Марко работает хорошо .
В отличие от рекомендованного способа Angular (как показано plunkr treeface) следует использовать выражение обратного вызова, которое не требует определения expressionHandler. В примере Марко изменение:
В шаблоне
В функции директивы ссылки
У этого есть один недостаток по сравнению с решением Марко - при первой загрузке функцияMethodToBeCalled будет вызываться с myParam === undefined.
Рабочий экзамен можно найти на @treeface Plunker
источник
Просто чтобы добавить некоторую информацию к другим ответам - использование
&
- хороший способ, если вам нужна изолированная область.Основным недостатком решения marko является то, что оно заставляет вас создавать изолированную область видимости для элемента, но вы можете иметь только одну из них на элементе (в противном случае вы столкнетесь с угловой ошибкой: несколько директив [директива1, директива2] с запросом для изолированного прицела )
Это значит, что ты :
Поскольку в исходном вопросе используется директива,
restrict:'A'
обе ситуации могут довольно часто возникать в более крупных приложениях, и использование изолированной области здесь не является хорошей практикой, а также ненужно. На самом деле у rekna была хорошая интуиция в этом случае, и она почти работала, единственное, что он делал неправильно, - это неправильно вызывала функцию $ parsed (посмотрите, что она возвращает здесь: https://docs.angularjs.org/api/ ng / service / $ parse ).TL; DR; Код фиксированного вопроса
и код
источник
$parse
.Не зная точно, что вы хотите сделать ... но все же вот возможное решение.
Создайте область действия со свойством '&' в локальной области. Он «предоставляет способ выполнить выражение в контексте родительской области видимости» (подробности см. В документации директивы ).
Я также заметил, что вы использовали сокращенную функцию связывания и вставили туда атрибуты объекта. Вы не можете этого сделать. Более ясно (imho) просто вернуть объект определения директивы. Смотрите мой код ниже.
Вот пример кода и скрипка .
источник
Вы можете создать директиву, которая выполняет вызов функции с параметрами, используя
attrName: "&"
для ссылки на выражение во внешней области.Мы хотим заменить
ng-click
директиву наng-click-x
:Если бы у нас был такой объем:
Мы могли бы написать нашу директиву так:
Вот живая демонстрация: http://plnkr.co/edit/4QOGLD?p=info
источник
Вот что у меня сработало.
Html с помощью директивы
Html директивы: orderitem.directive.html
Объем директивы:
источник
Мое решение:
complete
)Директива
Полимерный компонент
Страница
searchData
это функция управленияисточник
Это должно работать.
источник