我正在尝试为过滤搜索构建一个对象。用户可以在搜索中添加多个过滤器,并且可以使用不同的值多次添加相同的过滤器。
向用户显示添加过滤器的按钮。添加的每个都显示从可用过滤器列表中填充的选择。
此刻,当我添加两个相同的过滤器(即两个'过滤器A')时,它们都共享相同的基础值。当在选择框中选择过滤器时,如何使用Angular来断开初始过滤器数组的链接?
HTML
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<button data-ng-click="addFilter()">Add Filter</button>
<div data-ng-repeat="c in current.filters">
<div class="select-box">
<select data-ng-model="c.filter" data-ng-options="filter.name for filter in filters"></select>
<input type="text" placeholder="Filter value" data-ng-model="c.filter.value">
</div>
</div>
<pre>{{current | json}}</pre>
</div>
的JavaScript
var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope) {
$scope.current = {"filters":[]};
$scope.filters = [
{"id":"1", "name":"Filter A", "value":""},
{"id":"2", "name":"Filter B", "value":""},
{"id":"3", "name":"Filter C", "value":""},
{"id":"4", "name":"Filter D", "value":""}
];
$scope.addFilter = function() {
$scope.current.filters.push({});
};
});
答案 0 :(得分:1)
我认为AngularJS并不像你期望的那样处理select ng-model指令。在这种情况下,它绑定到filters数组中的选定过滤器对象。这就是为什么当您更改具有相同名称的过滤器的值时,具有该名称的所有过滤器都会看到更改,因为基础对象是相同的。
这里你要做的是将过滤器值单独绑定,而不是作为过滤器对象的一部分。
更改此行
<input type="text" placeholder="Filter value" data-ng-model="c.filter.value">
到
<input type="text" placeholder="Filter value" data-ng-model="c.value">
您也不需要为每个过滤器定义“值”字段。