标签的属性在angular指令中不起作用?

时间:2013-12-02 13:45:24

标签: javascript html5 angularjs

我正在努力学习如何使用角度指令,并且到目前为止成功。我只有一个小问题,我无法弄清楚。

在我的指令中,我在输入字段的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/

我犯了什么错误导致我的问题以及如何解决?

1 个答案:

答案 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")
 }

示例:http://jsfiddle.net/cherniv/7GG6k/