我尝试使用自定义AngularJS指令修改input
元素。基本上我想用国家/地区下拉列表替换任何<input type="country">
字段。
但该指令似乎不适用于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);
}
}
};
});
&#13;
<!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>
&#13;
有人可以解释并建议解决方法吗?
P.S。我也在指令中尝试过这样做,但它也不起作用!
replace: true,
template:'<div>hello</div>'
P.S。我知道我可以使用ng-country
或其他自定义标记,但我只想更改input
代码,因为我想知道为什么会发生这种情况或者可能会发现我做错了什么?< / p>
答案 0 :(得分:2)
最新更新:
您的代码只是在元素上设置html,而不是替换它。您可能希望使用replaceWith,如下所示:
var app = angular.module("TestApp",[]);
app.controller("TestController", function($scope){
$scope.message = "Input Directive Test"
});
app.directive("input", function() {
return {
restrict: "E",
link: function(scope, elem, attr) {
if(attr.type === "country") {
var select = angular.element("<select><option>USA</option></select>");
elem.replaceWith(select);
}
}
}
});
这里是JSBin:https://jsbin.com/juxici/4/edit?html,js,output
我的回答的初始版本:
这是一个在“替换”时没有任何问题的示例。和&#39;模板&#39;使用。我没有检查类型等,但您可以在链接器代码中执行此操作。
JSBin:https://jsbin.com/juxici/2/edit?html,js,output
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
</head>
<body ng-app="TestApp">
<div ng-controller="TestController">
<h2>{{message}}</h2>
<input type="country" ng-model="name"/>
</div>
</body>
</html>
使用Javascript:
var app = angular.module("TestApp",[]);
app.controller("TestController", function($scope){
$scope.message = "Input Directive Test"
});
app.directive("input", function() {
return {
restrict: "E",
replace: true,
template:"<select><option>USA</option></select>"
}
});