你有幾個選擇:
1)使用功能NG重複註冊 「點擊」 元素:
app.controller('AppCtrl', ['$scope', 'yourService', function($scope, yourService){
$scope.selected = [];
yourService.fetch(function(items){
$scope.items = items;
});
$scope.select = function(item){
var index;
if ((index = $scope.selected.indexOf(item)) !== -1){
$scope.selected.splice(index, 1); // remove already existing, aka toggle
} else {
$scope.selected.push(item);
}
}
$scope.isSelected = function(item){
return $scope.selected.indexOf(item) > -1;
}
$scope.calculate = function(){
var items = [];
for(var i = 0, len = $scope.selected.length; i < len; i++){
items.push($scope.selected[i].value);
}
yourService.jsonp(items.join(','));
}
});
<div ng-repeat="item in items">
<div ng-click="select(item)" ng-class="{'isSelected':isSelected(item)}">{{ your item data }}</div>
</div>
2)把一個「狀態「
app.controller('AppCtrl', ['$scope', 'yourService', function($scope, yourService){
yourService.fetch(function(items){
for(var i = 0, len = items.length; i < len; i++){
items[i].selected = false;
}
$scope.items = items;
});
$scope.calculate = function(){
var items = [];
for(var i = 0, len = $scope.items.length; i < len; i++){
if ($scope.items[i].selected) {
items.push($scope.items[i].value); // this could be done with .reduce or .map, but it's not cross-browser
}
}
yourService.jsonp(items.join(','));
}
});
<div ng-repeat="item in items">
<div ng-click="item.selected=!item.selected" ng-class="{'isSelected':item.selected}">{{ your item data }}</div>
</div>
3)你可以(也應該)集中所有的選擇/取消/在你的服務提交數據,而不是把它都在你的控制範圍,這樣你可以重用的代碼,通常是很好的做法
4)另一種方法是爲每個按鈕創建一個隔離的示波器指令,但我認爲這對您正在嘗試完成的操作來說過於矯枉過正
基本上,您的用戶界面總是反映您的數據,而不是反過來。
我知道我在單個問題中問得太多,但是如果您可以提供一些我可以參考的鏈接,那就太棒了。我是新角色,不熟悉要搜索的術語。 – user2714639