2016-06-21 8 views
0

私の問題:ng-repeat = "n" [n]の中にintergerを入れても機能しますが、使用するstock.price | BuySellAmount:ctrl.moneyは、人が持っている総金額を基本的に株式が価値がある分だけ分けるカスタムフィルタです。 Stock.priceを追加するだけです。 BuySellAmount:[]内のctrl.moneyがエラーになります。だから、どのように[]内の情報を追加することができますか?ng-repeat内で購入可能なアイテムの最大数を取得

  <div ng-if="stock.price | BuySellAmount:ctrl.money" class="input-group col-md-1"> 
       <select class="form-control "> 
       <option ng-repeat="n in [] | makeRange" ng-selected= "{{n == stock.price | BuySellAmount:ctrl.money}}">{{n}}</option> 
       </select>    
       <span class="input-group-btn"> 
       <button ng-if="stock.price | BuySellAmount:ctrl.money" class="btn btn-success" ng-click="buyStock()">Buy</button> 
       </span> 
      </div> 



(function() { 
     'use strict'; 
     angular 
     .module('MODULE') 

     // controller 
     .controller('CONTROLLER',['$http', function($http){ 
      var self = this; 

      self.money = 50; 

      // get the json feed and create a new array with the prices and labels 
      $http.get('js/stocks.json') 
      .success(function(data, status, headers, config) { 
       //self.stockList = angular.copy(data.stocks); 
       //console.log(self.stockList); 
       var stocks = []; 
       for (var i = 0; i < data.stocks.length; i++) { 
        stocks.push({ 
         name: data.stocks[i].name, 
         price: Math.floor(Math.random()*(600-data.stocks[i].price+1)+data.stocks[i].price) 
        }); 
       } 
       self.stockList = stocks; 
      }) 
      .error(function(data, status, headers, config) { 
       // log error 
      }); 


     }]) 
     .filter('randomPrice', function() { 
     return function(min, max) 
     { 
      var max = 5000; 
      console.log() 
      return Math.floor(Math.random()*(max-min+1)+min); 
     } 
    }) 


    .filter('BuySellAmount', function() { 
     return function(stockprice,moneyinhand) 
     { 
      //Math.random()*(max-min+1)+min 
      var amount = Math.floor(moneyinhand/stockprice); 
      return amount; 
     } 
    }) 

    .filter('makeRange', function() { 
     return function(input) { 
      var lowBound, highBound; 
      switch (input.length) { 
      case 1: 
       lowBound = 0; 
       highBound = parseInt(input[0]) - 1; 
       break; 
      case 2: 
       lowBound = parseInt(input[0]); 
       highBound = parseInt(input[1]); 
       break; 
      default: 
       return input; 
      } 
      var result = []; 
      for (var i = lowBound; i <= highBound; i++) 
       result.push(i); 
      return result; 
     }; 
    }); // end 
    })(); 
+1

<div ng-if="stock.price | BuySellAmount:ctrl.money" class="input-group col-md-1"> <select class="form-control "> <option ng-repeat="n in [(stock.price | BuySellAmount:ctrl.money)] | makeRange" ng-selected= "{{n == stock.price | BuySellAmount:ctrl.money}}">{{n}}</option> </select> <span class="input-group-btn"> <button ng-if="stock.price | BuySellAmount:ctrl.money" class="btn btn-success" ng-click="buyStock()">Buy</button> </span> </div> 
1.常に役立ちます。私はあなたが達成しようとしていることを理解していません。たぶんあなたは少し質問を分解しようとする必要があります –

+0

私はそれをきれいにしました。あなたがそれをより良く理解できることを願っています。ありがとう! – rchiriboga

+0

したがって、 'stock.price |の結果を反復したいと思います。 BuySellAmount:[] | makeRange "'のng-repeat = "nのctrl.money'、そうですか? –

答えて

0

この問題が発生する可能性のあるものについては、私はあまりにも難しいことではないことを願って、私は株式を置くことができました.price | BuySellAmount:代わりに{{}} NGリピート内の[]を使用して()内ctrl.money

新しいNGリピート

ライブ例を有する
+1

あなたは 'stock.price | BuySellAmount:ctrl.money'を3回実行しますが、1回だけ実行できます。フィルターはそれぞれのダイジェストで評価されるので、フィルターには注意が必要です。ここであなたのコードを少し最適化する方法を見つける:[SO答え](http://stackoverflow.com/a/11722324/1065780) –

関連する問題