我试图在每列的顶部创建一个带有过滤器的表。
我无法弄清楚为什么 Any 过滤器正在工作,而不是单个列过滤器。
我有代码@http: //plnkr.co/edit/6ghH02
我也尝试在设置 ng-model 后编译元素,但它不起作用。
有人可以帮忙吗?
我试图在每列的顶部创建一个带有过滤器的表。
我无法弄清楚为什么 Any 过滤器正在工作,而不是单个列过滤器。
我有代码@http: //plnkr.co/edit/6ghH02
我也尝试在设置 ng-model 后编译元素,但它不起作用。
有人可以帮忙吗?
如果您摆脱指令并使用 input[text] 的 ng-change 属性,则可以执行此操作,如下所示:
function TestController ($scope) {
$scope.valueChanged = function (name, value) {
if (!$scope.search) {
$scope.search = {};
}
$scope.search[name] = value;
}
};
<body ng-controller="TestController">
<th ng-repeat="sortName in columnNames">
<input type=text ng-model="value" ng-change="valueChanged(sortName, value)">
</th>
关于为什么您的原始代码不起作用的简短答案是ngRepeat 创建了一个新范围,并且 ng-model 中的值必须是一个可分配的变量。
正如@Ryan 指出的那样,ng-repeat 的嵌套范围是诀窍。编写控制器方法的另一种方法是使用子作用域的 $parent 属性来访问父作用域中的搜索属性:
<th ng-repeat="sortName in columnNames">
<input type=text ng-model="$parent.search[sortName]"></th>
与@Ryan 的解决方案一样,不需要指令。但是,需要创建/初始化其他搜索属性:
<div ng-init="search.name = ''; search.phone = ''"></div>