Я пытаюсь изменить элемент input
с помощью пользовательской директивы AngularJS. В основном я хочу заменить любые поля <input type="country">
выпадающим списком страны.Как использовать настраиваемую директиву для полей ввода в Angular 1.x?
Но директива, похоже, не работает с полями input
. Если я изменю его на любой другой тег, он работает?
Вот код:
angular.module('plunker', [])
.controller('MainCtrl', function ($scope) {
$scope.name = 'World';
});
angular.module('plunker')
.directive('input', function() {
return {
restrict: 'E',
scope: {ngModel: '=?'},
link: function(scope, elem, attr) {
if(attr.type === 'country') {
elem.html('html code for select');
alert(elem);
}
}
};
});
<!doctype html>
<html ng-app="plunker" >
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<link rel="stylesheet" href="style.css">
<script>document.write("<base href=\"" + document.location + "\" />");</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
Name: <input type="country" ng-model="name"/> <br/>
</body>
</html>
Может кто-то пожалуйста, объясните и предложить обходной путь?
P.S. Я также попытался сделать это в директиве, но это тоже не сработает!
replace: true,
template:'<div>hello</div>'
P.S. Я знаю, что могу использовать ng-country
или какой-либо другой пользовательский тег, но я хочу изменить тег input
только потому, что хочу узнать, почему это происходит, или, возможно, узнать, что я делаю неправильно?
Вместо того, чтобы объявить вашу директиву в качестве элемента, то почему бы не объявить его как атрибут? – stevenelberger
Вы должны дать ограничение на уровень класса/атрибута и настраиваемое имя директивы как любой myInput и т. Д., –