49

我有一个像下面这样的跨度标记,单击它会在控制器中调用一个函数。

HTML

<div class="row" ng-repeat="event in events">
    <div class="col-lg-1 text-center">
        <span class="glyphicon glyphicon-trash" data={{event.id}} ng-click="deleteEvent()">
        </span>
    </div>
</div>

控制器

$scope.deleteEvent=function(){
    console.log(this);
}

我需要在控制器函数中获取数据属性中的值。我尝试使用这个关键字和 $event; 没有一个工作。

请帮忙。

4

3 回答 3

83

更简单的是,将$event对象传递给以ng-click访问事件属性。举个例子:

<a ng-click="clickEvent($event)" class="exampleClass" id="exampleID" data="exampleData" href="">Click Me</a>

在您的clickEvent() = function(obj) {}函数中,您可以data像这样访问值:

var dataValue = obj.target.attributes.data.value;

哪个会返回exampleData

这是一个完整的 jsFiddle

于 2013-08-03T07:23:20.913 回答
80

尝试将其直接传递给 ng-click 函数:

<div class="col-lg-1 text-center">
    <span class="glyphicon glyphicon-trash" data="{{event.id}}"
          ng-click="deleteEvent(event.id)"></span>
</div>

然后它应该在您的处理程序中可用:

$scope.deleteEvent=function(idPassedFromNgClick){
    console.log(idPassedFromNgClick);
}

这是一个例子

于 2013-08-03T04:35:29.940 回答
3

除了 Brett DeWoody 的答案:(现在更新)

var dataValue = obj.srcElement.attributes.data.nodeValue;

在 IE(9+) 和 Chrome 中运行良好,但 Firefox 不知道 srcElement 属性。我发现:

var dataValue = obj.currentTarget.attributes.data.nodeValue;

适用于 IE、Chrome 和 FF,我没有测试 Safari。

于 2014-02-26T14:27:19.630 回答