我想創建一個只與<input type="password"
匹配的指令。如何使指令僅適用於特定類型的元素內容
任何時候編譯發現這種類型的輸入,我希望我的指令適用。我不想添加任何東西到元素(一個額外的類或屬性)。
這可能嗎?我該怎麼做?
SOLUTION:
爲後人的緣故,我包括我的solution:
angular.module('controls', [])
.directive('type',
function() {
return {
restrict: 'A',
compile: function(element, attributes) {
if (element.prop('nodeName') === 'INPUT' && attributes.type === 'password') {
return function link(scope, element, attributes, controller) {
element.on('keypress', function(event) {
var s = String.fromCharCode(event.which);
if (s.toUpperCase() === s && s.toLowerCase() !== s && !event.shiftKey) {
element.addClass('capslock');
} else {
element.removeClass('capslock');
}
});
};
}
}
};
});
.capslock {
background: #fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAKUSURBVEhLrVbLahRBFK3ErhoNuHIlghsRBBE3vlAzVZMEN7pwoQtX6jcIKhiIuBAXfoCPlVs3IrhQEQSVBIIg+A5MvyaOqKjJqKC4Gc9tq6Wn+trdM5kDB4a+557TXXWre0QZukKMthpePdLycmTUo1DLdqRVhxga2Q6Neky1wHiatLatf9w8KlYFRh5HwAKCutUoF2ItT3TRa22qYbGuNsNgLm9YmfOhVlusXTFiXZvCci0zJv2yE4zXDlhbHpGpTSLsF9M8KH/6eABr34u4UdsEwZLTwBKDch03doWrucTSLjexRTbmL7ozYhSFJ1yDSwrDNI4Q0XOV0zCcowwbJwQm8RgjypHCZjKjT8cg1F6lUGScTJtGcOG5K3AZG3UtG5aCQnEOy5dXy7eUJfy6t5MVZPi/sBRVQ33t7ccxkOe5YsqysBSkKQ+VFwVEd/lifs/KkGxPQSj28QENTJMvqhv9hKWg0OTYcJ5GBgLFL2xRy0vvJsW6N3vF2vYhMfZQC8965kA10pD2NXrQf9r1IyLrK55QfeaKLgOjzlj/HGB0iutxmQRizSt9DYYTKH3awztc0eWQAu/jCdU0V3Q5jMDYyAsiaMjtXJHhygO1t4P09BJ+ygmyhOm5xJ0BPT3XkyU0z6xciJZWhzlRlrTX+OugbMs/vMQ1DN5trqeHWh2xLekLXN5jhb38jdX4gaf9nhC/6ZqjyZHeMMmLO4vWxJoNuNMPXMPKKD/6+1ZvtDG98Ce8XRB18k2DEavwDd/LPdaeRwufK5yX95xBX8RqLRpvt7UtRjQ+tr7qC4EjHXDaImtXHWg+CM5mzYqIJZynibftgyNuyK2YyLM0/rj7VzD/ZAfsBYbiVoxasy63WXkBhPgDAANrgFGFYP4AAAAASUVORK5CYII=) no-repeat right -10px center;
background-size: 16px 16px;
background-position: right 5px center;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app='controls'>
Type into second box with caps on or off and see what happens!
<br/>
<input type="text" />
<input type="password" id="search-box" ng-model="searchString" placeholder="text search" />
<p>{{searchString}}</p>
<div></div>
</body>
問題是,Angular已經提供了一個''指令。我想你可以添加一個'type'屬性指令並檢查'pre'鏈接函數中的元素類型 – Phil
是的,或者即時編譯所有匹配元素,就像使用jq'$('input [type =「password」 ]')。each(/ * add指令屬性和$編譯它* /)'但是這是一個壞主意,爲什麼你會這樣做,而不是寫一個指令? – floribon
'$ compile($('input [type =「password」]')。attr('mydirective',true))(scope)' – cgTag