我想清除過濾器的輸入字段,當用戶按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的新手。我也看過How do I pass multiple attributes into an Angular.js attribute directive?,但我無法獲得工作解決方案。
他還需要定義'scope.clear()' – Webnet
@Webnet我改名到'clearFilter'他在控制器 –
謝謝。爲了確保我明白了,我需要指定'require'屬性才能使它工作?我很困惑,爲什麼我需要這個?這個require還有'^'前綴:從文檔:「^前綴表示這個指令在其父母上搜索控制器(沒有^前綴,指令會在它自己的元素上查找控制器)。」你能解釋一下這是在做什麼?或者指出我的解釋? – Darren