AngularJS получение $event из директивы

кажется довольно простым, но я не могу заставить $event всплывать из моей директивы. Когда test вызывается из cb-click, $event не определено, но вне директивы (через html) это объект события.

если я использую функцию связывания (не входит в мою скрипку), я могу получить $event, но я не могу $ parse / $eval его против правильной области.

http://jsfiddle.net/langdonx/KgcGY/

<div ng-app="app" ng-controller="x">
    <!-- via directive -->
    <checkbox cb-model="y" cb-click="test($event, b)"></checkbox>
    <!-- via html -->
    <div><input id="c2" type="checkbox" ng-model="x" ng-click="test($event, 'a')"> <label for="c2">{{x}}</label></div> 
</div>

-

var app = angular.module('app', []);

app.directive('checkbox', function ($parse) {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            cbModel: '=',
            cbClick: '&'
        },
        template: '<div><input id="c1" type="checkbox" ng-model="cbModel" ng-click="cbClick($event, 'a')"> <label for="c1">{{cbModel}}</label></div>'
    };
});

app.controller('x', function x($scope) {
    $scope.x = true;
    $scope.y = true;
    $scope.test = function (ev, b) {
        console.log('test called, ev is', ev, 'b is', b);
        return 'xyz';
    }
});

1 ответов


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

ng-click="cbClick({ev: $event, b:\'a\'})

С этим HTML:

cb-click="test(ev, b)"

Скрипка

С директивы страницы, раздел "объект определения директивы":

часто желательно передавать данные из изолированной области через выражение и в родительскую область, это можно сделать, передав карту имен локальных переменных и значений в оболочку выражения fn. Для пример, если выражение increment(amount) затем мы можем указать значение суммы, вызвав localFn as localFn({amount: 22})