2014-05-14 97 views
0

嘿家伙我需要得到该按钮的数据值,当我点击它。我想通过这种方式,但它不工作..如何获得点击属性值?

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

app.controller("myAppCtrl", function($scope, $attrs) { 
    $scope.events = {} 
    $scope.events.btnLoadMore = function() { 
     var panel = $attrs.emptywidget; 
     alert(panel); 
    } 
}); 

HTML

<html ng-app="myApp"> 
<head> 
    <title></title> 
</head> 

<body ng-controller="myAppCtrl"> 
    <button data-emptywidget="#panel2" ng-click="events.btnLoadMore()">Click</button> 
</body> 
</html> 

回答

1

你可以使用angular.element的组合,并在$事件源传递以及:http://jsfiddle.net/ahchurch/9USEv/1/

<div ng-controller="myAppCtrl"> 
    <button data-emptywidget="#panel2" ng-click="events.btnLoadMore($event)">Click</button> 
</div> 

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

app.controller("myAppCtrl", function($scope, $attrs) { 
    $scope.events = {} 
    $scope.events.btnLoadMore = function($event) { 
     console.log($event); 
     var panel = angular.element($event.target).attr("data-emptywidget"); 
     console.log(panel); 
    } 
}); 
+0

谢谢安德鲁的观点,这是给我更好的解决方案! –

2

您可以访问数据属性是通过标准DOM访问的唯一途径,这是不是里面一个明智的控制器。您传递给控制器​​的$attrs变量也不会给您太多的影响,因为您的控制器与任何东西没有直接关系(或者至少不需要或不应该)

如果您需要做这样的事情,那么你就可以在你的ng-click更改为类似

ng-click="events.btnLoadMore('#panel2')" 

然后改变你btnLoadMore函数的定义采取了争执。或者,您可以编写一个指令来给出该值,但这更复杂。但这取决于你想要用它来做什么。上述应工作,虽然

1

你可以做一些不同的事情。

1)您可以在数据通过函数传递这么喜欢

ng-click="events.btnLoadMore('#panel2')" 

然后改变你的函数来匹配如此:

$scope.events.btnLoadMore = function(panel) { 
    alert(panel); 
} 

2)您可以通过$的数据传递事件参数

ng-click="events.btnLoadMore($event)" 

然后改变你的函数来匹配如此:

$scope.events.btnLoadMore = function(clickEvent) { 
    alert(clickEvent.target.attributes['data-emptywidget'].value); 
} 

3),你只需看看传递给函数

$scope.events.btnLoadMore = function() { 
    alert(arguments[0].target.attributes['data-emptywidget'].value); 
}