1

我有一个角度指令,它将生成引导表单组,查找 $scope.errors 以获取指令的 ng-model 的值以显示错误。示例如下:我的 html 代码:

<input type="text" b-input ng-model="data.company.name" label="Company Name" class="form-control"/>

和我的指令代码:

app.directive('bInput', function ($compile) {
    return {
        restrict: 'EA',
        replace: true,
        link: function (scope, element, attrs) {
            var div = $('<div>', {
                'class': 'form-group',
                'ng-class': " 'has-error' : errors." + attrs.ngModel + " != null "
            });

            $compile(div)(scope);
            element.wrap(div);
            if (attrs.label != undefined) {
                element.before('<label for="' + attrs.name + '" class="control-label">' + attrs.label + '</label>');
                element.removeAttr('label');
            }
        }
    };
});

你能解释一下我如何达到预期的结果吗?

4

1 回答 1

2

修改指令的编译 fn 内的元素,因为 DOM 是普通的。然后在从编译函数返回的链接函数中重新编译该元素。

代码

app.directive('bInput', function($compile) {
  return {
    restrict: 'EA',
    replace: true,
    compile: function(element, attrs) {
      var div = $('<div>', {
        'class': 'form-control',
        'ng-class': " 'has-error' : errors." + attrs.ngModel + " != null "
      });
      element.wrap(div);
      if (attrs.label != undefined) {
        element.before('<label for="' + attrs.name + '" class="control-label">' + attrs.label + '</label>');
        element.removeAttr('label');
      }
      element.removeAttr('b-input');
      return function(scope, element, attrs) {
        var linkFn = $compile(element);
        linkFn(scope)
      }
    };
  });

在这里查看类似的SO 答案

于 2015-07-19T14:51:30.983 回答