Вызов функции внутри директивы angular и ввод события в параметры

Мне нужна ваша помощь.

У меня есть директива с параметром функции (scope: {myParam: '@'}). И я передаю параметры в HTML, например my-param="myFunc(param1, param2)"

Это работает отлично. Но мне нужно ввести объект события в параметры. Кто-нибудь знает, как я могу это сделать?

Я попробовал $provider.annotate и $provider.instantiate, но они не сработали, потому что в директиве используется эталонная функция. ($a в моем случае), поэтому он не может получить аргументы функции.

Есть идеи?


person ops.rio    schedule 23.10.2013    source источник


Ответы (3)


Когда вы вызываете функцию, созданную с помощью синтаксиса области & изолировать, вы можете передать ей параметры как именованную карту. Если ваша директива определена следующим образом:

scope: { myParam: '&' },
link: function (scope, el) {
  el.on('click', function (e) {
    scope.myParam({$event: e});
  });
}

и используется так:

<my-directive my-param="console.log($event)"></my-directive>

... вы должны увидеть желаемое поведение.

person chrisrhoden    schedule 24.10.2013
comment
Привет @chrisrhoden, в моем случае у меня есть div с contenteditable, поэтому я создал параметр для замены события ввода, когда этот параметр определен - person ops.rio; 24.10.2013

Ответ Крисродена великолепен. Я бы предложил немного расширить его следующим образом. Это поможет предотвратить проблемы с двойной активацией ng-click, связанные с мобильными устройствами и/или конфликтами AngularJS с jQuery.

myApp.directive('responsiveClick', function(){
  return {
    scope: { myCb: '&' },
    link: function (scope, el,attr) {
  el.bind('touchstart click', function (e) {
    e.preventDefault();
    e.stopPropagation();
    scope.myCb({$event: e});
  });
  }
}
});

вместе с разметкой следующим образом:

<a class="mdi-navigation-cancel" my-cb="removeBasketItem($event,item)" responsive-click></a>
person Jared Conti    schedule 14.04.2015

вы пытались передать его в исходной функции?

my-param="myFunc($event, param1, param2)"
person user2643882    schedule 23.10.2013