2016-12-29 10 views
3

ng-repeatにボタンを作成し、それぞれに値を設定します。 選択したボタンから値を取得して配列に追加し、他のボタンをクリックした場合は、その値をオブジェクトとして配列に追加します。 同じボタンをもう一度クリックすると、配列から値を削除する必要があります。ng-repeatの配列にオブジェクトとして追加するためにどのボタンがクリックされたかをどのように知っていますか?

<div ng-repeat="room in Rooms"> 
    ... 
    <button id="HR_{{room.Id}}" value="{{room.Id}}" onclick="AddToCart({{room.Id}})">Add To Cart</button> 
</div> 

Javascriptを:

var cartlist = []; 

function AddToCart(n) { 
    var c = $("#cartcount").text(); 

    cartlist.push({ 
     Id: n, 
    }); 
    $("#cartcount").text(parseInt(c) + 1); 
} 

このコードは、エラーの原因とonclick="AddToCart({{room.Id}})"。私はng-clickを使用しますが、私は答えを得ることができませんでした。

+0

が '' NGクリック= "functionOnScope(部屋を)" を使用し、あなたのような何かを行うことができます。 – Tushar

+1

'onclick =" AddToCart(room.Id) "は動作するはずです。ハンドラ内での補間は必要ありません。 –

+1

**悪い習慣:** 'addToCart'に' event'を渡し、 'event.target.value'を使ってクリックされたボタンの' value'を得ることができます。 – Tushar

答えて

4

同じボタンで追加または削除する必要がある場合は、要素が配列内にあるかどうかを確認するロジックを追加する必要があります。

HTML::

selectedRooms: {{selectedRooms}} 

<div ng-repeat="room in rooms"> 
    <button ng-click="Add_Remove_Room(room.id)">Add/Remove {{room.name}}</button> 
</div> 

がコントローラ:

angular.module('tAngularApp') 
    .controller('MainCtrl', ["$scope", "$rootScope", function ($scope, $rootScope) { 
    this.awesomeThings = [ 
     'HTML5 Boilerplate', 
     'AngularJS', 
     'Karma' 
    ]; 

    $scope.rooms = [ 
     {id:1, name: "Room #1"}, 
     {id:2, name: "Room #2"}, 
     {id:3, name: "Room #3"}, 
     {id:4, name: "Room #4"} 
    ]; 

    $scope.selectedRooms = []; 


    $scope.Add_Remove_Room = function (roomID) { 
     var index = $scope.selectedRooms.indexOf(roomID); 
     if(index === -1){ 
      // If is not selected the room -> add it 
      $scope.selectedRooms.push(roomID); 
     } else { 
      // If is selected the room -> remove it 
      $scope.selectedRooms.splice(index, 1); 
     } 
    } 

}]); 
0

あなたは代わりにそうようng-clickを使用する必要があります。

ng-click="AddToCart(room.Id)"

2

これは既にこの質問に回答されています Adding parameter to ng-click function inside ng-repeat doesn't seem to work

これが答えた:

代わりの

<button ng-click="removeTask({{task.id}})">remove</button> 

は、次の操作を行います。

<button ng-click="removeTask(task.id)">remove</button> 

このフィドルをご覧ください。

http://jsfiddle.net/JSWorld/Hp4W7/34/

+0

FYI:OPは 'ng-click'ではなく' onclick'を使用しようとしています – TheSharpieOne

1

使用補間をNGクリックし、削除します。

<button id="HR_{{room.Id}}" value="{{room.Id}}" ng-click="AddToCart(room.Id)">Add To Cart</button> 
関連する問題