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

2

如果你想知道他们选择了什么,你应该替换

ng-model="widget.chosenValue"
ng-change="widget.updateTag(item.item_id, widget.chosenValue)

ng-model="item.chosenValue"
ng-change="widget.updateTag(item)

这会将 selectedValue 应用于列表中的每个项目,所以它看起来像

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

然后在您的 updateTag 功能中,您可以访问

  • item.item_id
  • 项目标签
  • item.chosenValue
于 2015-03-18T14:43:09.077 回答
1

把它放在控制器中:

$scope.widget.chosenValue = {};

这在重复的元素中:

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

使用 $id 与 $index 各有利弊;使用 $id 通常更安全,但会使跟踪信息更加烦人。

或者,您可以从 ng-model 表达式中删除任何句点,这将导致它将该属性绑定到最近的范围,而不是使用适当的对象搜索一个。我不建议这样做,因为它会使模型通过控制器访问很烦人。

于 2015-03-18T14:47:12.503 回答
0

尝试这个

<md-select ng-model="selectedOption"  
ng-change="performAction(selectedOption.chosenValue, selectedOption.tag, selectedOption.item_id)" >
<md-option 
ng-value="item" 
ng-repeat="item in widget.items">{{ item.tag }}</md-option>
</md-select>
于 2016-10-04T15:49:43.387 回答