0

我试图在每列的顶部创建一个带有过滤器的表。

我无法弄清楚为什么 Any 过滤器正在工作,而不是单个列过滤器。

我有代码@http: //plnkr.co/edit/6ghH02

我也尝试在设置 ng-model 后编译元素,但它不起作用。

有人可以帮忙吗?

4

2 回答 2

1

如果您摆脱指令并使用 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 中的值必须是一个可分配的变量。

于 2012-12-09T21:18:42.053 回答
0

正如@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>

http://plnkr.co/edit/wT34vh?p=preview

于 2012-12-11T18:27:26.710 回答