2014-05-14 130 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); 
}