2

シナリオ

動的/実行時に計算された値の配列にバインドする ng-repeat を使用するリピーターがあります。(つまり、私の配列には Brokerage: ($scope.BuyValue() + $scope.SellValue())* 0.5/100 のようなフィールドが含まれています)。

問題

ng-model を持つ入力ボックスの値を変更すると、リピーター内のフィールド Broker.Brokerage が更新されません。しかし、リピーター外のフィールドを適切に更新/バインドできます。

コード

<body ng-controller="BrokerController">
<div>
  <div>
    Buy Price   <input type="textbox" ng-model="BuyPrice"/><br/> 
    Sell Price  <input type="textbox" ng-model="SellPrice"/><br/> 
    Quantity    <input type="textbox" ng-model="Quantity"/><br/> 
    Buy Value   {{ BuyValue() }} <br/>
    Sell Value   {{ SellValue() }} <br/>
    Profit   {{ Profit() }} <br/><br/><br/>
    <h4>Brokers</h4>
    <div ng-repeat='Broker in Brokers'>
      Broker Name : <b>{{Broker.BrokerName}}</b>
      Brokerage Amount : <i>{{Broker.Brokerage}}</i>  ({{Broker.BrokerageDetail}})
      <br/>
    </div>
  </div>
</div>
  <script id="angularjs"  src="js/lib/angular/angular.js"></script>
  <script>
  var App = angular.module('ChooseYourBroker', []);

App.controller("BrokerController", ['$scope', function ($scope) {    
$scope.BuyPrice = 10;
$scope.SellPrice = 20;
$scope.Quantity = 100;
$scope.BuyValue = function(){ return ( $scope.BuyPrice * $scope.Quantity )};
$scope.SellValue = function(){ return ( $scope.SellPrice * $scope.Quantity )};
$scope.Profit = function(){ return ( $scope.SellValue() - $scope.BuyValue() )};
$scope.Brokers = [
    {
        BrokerName: 'Broker one', 
        BrokerageDetail :'0.5% value of Sell Value', 
        Brokerage: $scope.SellValue() * 0.5/100
    },
    {
        BrokerName: 'Broker two',  
        BrokerageDetail :'2% value of Sell Value', 
        Brokerage: $scope.SellValue() * 2/100
    },
    {
        BrokerName: 'Broker three', 
        BrokerageDetail :'1% value of Sell Value',  
        Brokerage: $scope.SellValue() * 1/100
    },
    {
        BrokerName: 'Broker Four', 
        BrokerageDetail :'0.5 % value of Buy Value and Sell Value',  
        Brokerage: ($scope.BuyValue() + $scope.SellValue())* 0.5/100
    }];
  }]);



  </script>   

4

3 に答える 3

3

戻り値が変更されるたびに通知を受けるには、 $watchonを設定する必要があります。SellValue()

$scope.$watch('SellValue()',function(newValue){
    for(var i=0;i<$scope.Brokers.length;i++){
        $scope.Brokers[i].Brokerage = ... * newValue; // Calculate the Brokerage
    }
});

説明:ビューはスコープを介してモデル値にバインドできます。オブジェクトはBrokersビュー要素ではないため、何にもバインドされていません。$watchモデルがモデルの他の部分への変更で通知されたい場合は、 が必要です。それ以外の場合、Brokerageプロパティはコントローラーの初期実行段階で 1 回だけ計算されます。

これは、変更BrokerageRateのたびに新しい Brokerage を計算するために作成したフィドルです。SellValue()

Broker Four両方の値の変更をプロパティに通知するBuyValue()必要があるため、別の監視が必要になるという点で、もう少し作業が必要になります。Brokerage

fiddle

于 2013-06-14T16:49:48.680 に答える