【问题标题】:AngularJS getting $event from a directiveAngularJS 从指令中获取 $event
【发布时间】:2013-04-16 17:00:07
【问题描述】:

看起来很简单,但我无法让 $event 从我的指令中冒出来。当testcb-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';
    }
});

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    您需要在指令中使用此语法:

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

    使用此 HTML:

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

    Fiddle

    来自directives page,“指令定义对象”部分:

    通常希望通过表达式将数据从隔离作用域传递到父作用域,这可以通过将局部变量名称和值的映射传递到表达式包装器 fn 来完成。例如,如果表达式是increment(amount),那么我们可以通过将localFn 调用为localFn({amount: 22}) 来指定金额值

    【讨论】:

    • @Langdon,文档中的一个工作示例会更有帮助。很多人都错过了这一点。 (我第一次阅读它时肯定没有得到它。)我包含了文档参考,以便人们可以看到它在文档中(简要)提到的位置。
    • 您的意思是它在文档中在哪里!几周前看过,但现在不见了。 SO万岁。
    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 2014-11-12
    • 1970-01-01
    • 2016-02-06
    • 2017-03-23
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多