ユーザーが esc キーを押したときにフィルターの入力フィールドをクリアしようとしています。ディレクティブのマークアップを入力するとすぐに、フィルターが完全に機能しなくなります。
私のマークアップは次のとおりです。
<div ng-app='App'>
<div ng-controller="MyCtrl">
<input type="text" ng-model="itemSearch" clear-input clear="clearFilter()" />
<button ng-click="clearFilter()">Clear</button>
<ul>
<li ng-repeat="item in items|filter:itemSearch"> <span>{{item.value}}</span>
</li>
</ul>
</div>
</div>
また、JavaScript は次のとおりです。
var app = angular.module('App', []);
function MyCtrl($scope) {
$scope.items = [
{value: 'one two three'},
{value: 'four five six'}
];
$scope.clearFilter = function () {
$scope.itemSearch = '';
};
}
app.directive('clearInput', function () {
function isEscapeKey(keyCode) {
if (keyCode === 27) {
return true;
}
return false;
}
return {
restrict: 'A',
scope: {
clear: '&'
},
link: function (scope, element) {
element.keyup(function (event) {
if (isEscapeKey(event.keyCode)) {
scope.clear();
}
});
}
};
});
ここにサンプルコードがあります:http://jsfiddle.net/darrenthomas/cbcpq/1/
私は経験豊富な JavaScript プログラマーではなく、AngularJS を初めて使用することを指摘しておきます。また、複数の属性を Angular.js 属性ディレクティブに渡すにはどうすればよいですか?も見ました。しかし、実用的な解決策を得ることができません。