我正在努力学习如何使用角度指令,并且到目前为止成功。我只有一个小问题,我无法弄清楚。
在我的指令中,我在输入字段的id的相同值上设置了for属性。但是点击标签并不会使输入控件成为正常工作的焦点。
我在一些示例代码中解决了这个问题:
<div ng-app='test' ng-controller='testCtrl'>
<label for="test1">Testlabel 1</label><br>
<input id="test1" type="text"></input><br>
<my-input id="test2"
label="Testlabel 2"
placeholder="enter somthing"
text="testVar"></my-input><br>
<span>{{testVar}}</span>
</div>
和javascript:
angular.module('test', [])
.directive('myInput', function() {
return {
restrict: 'E',
template: '<label for={{id}}>{{label}}</label><br>' +
'<input id={{id}} type="text" ' +
' placeholder={{placeholder}} ng-model="text" />',
scope: {
id: "@",
label: "@",
placeholder: "@",
text: "="
}
}
})
.controller('testCtrl', ['$scope', function($scope) {
$scope.testVar = 'testing';
}]);
jsfiddle中的相同代码:http://jsfiddle.net/U92em/
我犯了什么错误导致我的问题以及如何解决?
答案 0 :(得分:5)
您的“包装器”也具有相同的id
并且它不好。你可以用link
函数删除它,这样:
link: function(scope,el,attrs){
el.removeAttr("id");
}
工作:http://jsfiddle.net/cherniv/5u4Xp/
或compile
函数(感谢Florent):
compile: function(el){
el.removeAttr("id")
}