2016-09-27 17 views
0

私は角度のある簡単なショッピングカートをしようとしています。基本的に私はアイテムのリストを持っていて、ユーザーがQuantityを入力して0より大きい数量を持つアイテムのリストを取得したいと考えています。ng-repeatの入力値を角度で取得する方法

Qtyが0より大きい場合は、それを削除します。

私はQtyを正しく得ることができない何か間違ったことをしているに違いありません。

初めて動作しますが、2度目は更新されません。

マイコントローラ:

var extras1 = {Id:1,PackageName:"Balloons",Description:'Pack of 6',Cost:'$50.00',Qty:0} 
var extras2 = {Id:2,PackageName:"Hot Chips",Description:'Fresh fried hot chips fully of yummy fat and cholesterol.',Cost:'$10.00',Qty:0} 
var extras3 = {Id:3,PackageName:"Sausages",Description:'Hot sausages from premium offcuts',Cost:'$10.00',Qty:0} 

$scope.extras =[extras1,extras2,extras3]; 

$scope.extraSelected = function(){ 
    $scope.selectedExtra =[]; 
    angular.forEach($scope.extras, function(extra) 
    { 
     if(extra.Qty > 0) 
     { 
      console.log('Extra added'); 
      $scope.selectedExtra.push(extra); 
     } 


    }) 
    console.log($scope.selectedExtra); 
} 

マークアップ:あなたは余分なパラメータが渡されたとされているものとして定義されている

<div ng-repeat="extra in extras" class="text-left"> 
    <div class="row-centered"> 
     <div class="row form-group"> 
      <label class="col-md-1 col-sm-offset-1 step1-question" >{{$index + 1}}</label> 
      <div class="col-md-8"> 
       <span class="h4 step1-answer"> {{ extra.PackageName}} </span> 
       <br/> 
       <span class="h5"> {{ extra.Description}} </span> 
       <br/> 
       <span class="h5"> {{ extra.Cost}} </span> 
      </div> 
      <div class="col-md-1"> 
      <input type='text' class="form-control step1-answer text-center " 
        ng-model="extra.Qty" 
        placeholder="0" style="background-color:#ffffff;padding: 5px;height: 45px;" 
        ng-change="extraSelected(extra)" 
       /> 
      </div> 
     </div> 
     <hr/> 
    </div> 
</div> 
+0

コンソールログを追加できますか? –

+0

非常に奇妙なコード、特にsliceを呼び出すとき。 '$ scope.selectedExtra = [];'を実行しているので、項目の配列を取得したい場合は、項目を削除する必要はありません。 –

+0

答えて

1

このような何か、?

<input type="number" ng-model="extra.Qty" ng-change="extraSelected()"> 

$scope.extraSelected = function() { 
     $scope.selectedExtra = []; 
     angular.forEach($scope.extras, function(extra) { 
      if(extra.Qty > 0) { 
       console.log('Extra added'); 
       $scope.selectedExtra.push(extra); 
      } 
     }) 
     console.log($scope.selectedExtra); 
    } 
+0

ありがとうございました..あなたのコメントの後に私がしたことはまさにそれですが、最初に数量が表示されます。 Qtyを2回目に編集すると、Qtyが更新されません。 – snowflakes74

+0

私はそれを[JSFiddle](https://jsfiddle.net/biggieman/hpo6L692/1/)で試してみるとうまくいきます。 $ scope.selectedExtraと$ scope.extrasに必要な数量 –

+0

qtyが3に更新された場合、1回だけ動作し、2回目はqtyの更新値をコンソールに表示しません。コンソールはまだQtyとして表示されます1 – snowflakes74

0
$scope.extraSelected = function(extra){ 
    $scope.selectedExtra =[]; 
    angular.forEach($scope.extras, function(extra) 

ものforeach関数のパラメータとして - forEachはQtyが0の配列をループしているので、常に0になります。

関数のパラメータの1つを変更して、他のパラメータを変更しないようにします。

ここで機能的なスコープでのレッスン...たぶん

関連する問題