2013-04-16 2 views
8

Кажется довольно простым, но я не могу получить $ 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'; 
    } 
}); 

ответ

10

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

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

С помощью этого HTML:

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

Fiddle

С directives page, раздел «Директива Определение объекта»:

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

+0

Herp с, я должен читать документы больше. Благодаря! – Langdon

+4

@ Langdon, рабочий пример в документах был бы более полезным. Многие пропустили это. (Я, конечно, не получил его в первые несколько раз, когда я его читал.) Я включил ссылку на документацию, чтобы люди могли видеть, где она (кратко) упомянута в документах. –

+1

Вы имеете в виду, где это * было * в документах! Видел это несколько недель назад, но теперь это исчезло. Да здравствует ТАК. –

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