3

私は ng-options に渡すオブジェクトの配列を持っています。配列には次のパターンの通貨のオブジェクトが含まれています:

[{
        "cur_iso": "ILS",
            "cur_symbol": "\u20aa",
            "cur_name_he": "\u05e9\u05e7\u05dc",
            "cur_rate_in_nis": "1.0000",
    }, {
        "cur_iso": "USD",
            "cur_symbol": "$",
            "cur_name_he": "\u05d3\u05d5\u05dc\u05e8",
            "cur_rate_in_nis": "3.8580"
    }]

ng-optionsこの配列から選択するため に使用しています。

<select ng-model="bindCurrencyModel" ng-init="bindCurrencyModel='ILS'" 
ng-options="currency.cur_iso as currency.cur_symbol+' '+currency.cur_name_he for currency in currencies track by currency.cur_iso" 
                    ng-change="setCurrency(currency)">
</select>   

ユーザーが選択を変更しているときに、 bindCurrencyModelcur_isovalueの2 つのフィールドを更新したいと考えて bindRateModelcur_rate_in_nisます。

だから私は次の方法を作成しました:

            $scope.setCurrency=function(currency){
                $scope.bindRateModel=parseFloat(currency.cur_rate_in_nis);
            };

および set ng-change="setCurrency(currency)" しかし、問題は私が得ていることです:

   TypeError: Cannot read property 'cur_rate_in_nis' of undefined

別の奇妙な動作は、選択の最初にある空の行です。

フィドルを作成したすべてのコードを表示するには....

http://jsfiddle.net/d9esbgjf/5/

ありがとう!

4

4 に答える 4

1

あなたはここで奇妙なことをしています。かなり単純化できると思います。

まず、setCurrency(currency)スコープに対して評価されます。currencyスコープでフィールドを定義しないため、これは常に未定義になります。

直接参照できるプロパティを参照するために、多くの追加の変数を使用しています。これをきれいにすると、あなたの人生はずっと簡単になります。

あなたのアプローチの代わりに、これを考慮してください:

<select
  ng-model="selectedCurrency"
  ng-options="currency as currency.cur_symbol + ' '
              + currency.cur_name_he for currency in currencies">

ISO シンボルだけでなく、通貨オブジェクト全体を参照するモデルを削除ng-changeして作成しました。selectedCurrency

今、あなたはこれを行うことができます:

<input type="number" 
       ng-model="selectedCurrency.cur_rate_in_nis">

{{selectedCurrency.cur_iso}}たとえば、ISOコードです。

最後に、選択の開始時に空白行を削除するには、値を初期化します..例:

$scope.currencies = [{
    "cur_iso": "ILS",
        "cur_symbol": "\u20aa",
        "cur_name_he": "\u05e9\u05e7\u05dc",
        "cur_rate_in_nis": 1.0000,
        "cur_last_update": "",
        "cur_order": "1",
        "cur_available": "1"
}, {
    "cur_iso": "USD",
        "cur_symbol": "$",
        "cur_name_he": "\u05d3\u05d5\u05dc\u05e8",
        "cur_rate_in_nis": 3.8580,
        "cur_last_update": "2015-02-24 13:34:25",
        "cur_order": "2",
        "cur_available": "1"
}];
// Initialise value so select is initially selected on something.
$scope.selectedCurrency = $scope.currencies[0]

うまくいけば、この jsfiddleが元のアプローチよりもはるかにきちんとしていて、従うのがはるかに簡単であることがわかります。

于 2015-03-03T18:21:06.950 に答える