0

JSONデータから生成されたウィジェットがいくつかあり、ng-repeat. このウィジェット内には選択ドロップダウンがあります。

Controllerwithで関数を呼び出すことはできますが、その選択ng-changeを使用すると、すべてのウィジェットのすべての選択ドロップダウンで選択された値が変更されますng-model

どうすればこれを防ぐことができますか?

<div ng-repeat="item in widget.items" class="well col-md-6 col-lg-4">
    <select ng-model="widget.chosenValue"
            ng-change="widget.updateTag(item.item_id, widget.chosenValue)">

        <option value="companies"
                ng-selected="{{item.tag == 'companies'}}"
                changed="companies">companies</option>

        <option value="news"
                ng-selected="{{item.tag == 'news'}}"
                changed="news">news</option>

        <option value="people"
                ng-selected="{{item.tag == 'people'}}"
                changed="people">people</option>

        <option value="products"
                ng-selected="{{item.tag == 'products'}}"
                changed="products">products</option>
    </select>
</div>

選択したモデル:ng-model="widget.chosenValue"

^したがって、選択でオプションを選択すると、正しい値がwidget.updateTag関数に送信されますが、他のすべてのウィジェットの値も変更されます。

モデル スコープを各ウィジェットに分離する方法はありますか?

4

3 に答える 3

1

これをコントローラーに入れます:

$scope.widget.chosenValue = {};

そして、これは繰り返し要素で:

<select ng-model="widget.chosenValue[{{/*$id or $index*/}}]"

$id と $index の使用には長所と短所があります。$id を使用する方が一般的に安全ですが、情報を追跡するのが少し煩わしくなります。

または、ng-model 式からピリオドを削除することもできます。これにより、適切なオブジェクトを検索する代わりに、そのプロパティが最も近いスコープにバインドされます。コントローラーでモデルにアクセスするのが面倒になるため、これを行うことはお勧めしません。

于 2015-03-18T14:47:12.503 に答える