各列の上部にフィルターがあるテーブルを作成しようとしていました。
Anyフィルターが機能しているのに、個々のcolumフィルターが機能していない理由を理解できません。
私はコード@http://plnkr.co/edit/6ghH02を持っています
ng-modelを設定した後、要素をコンパイルしようとしましたが、機能しませんでした。
誰か助けてもらえますか?
各列の上部にフィルターがあるテーブルを作成しようとしていました。
Anyフィルターが機能しているのに、個々のcolumフィルターが機能していない理由を理解できません。
私はコード@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>