从另一个指令动态添加,编译和链接ng-class属性

时间:2015-11-17 14:49:26

标签: javascript angularjs angularjs-directive

为了在输入表单中提供有关有效性的反馈,我正在使用ng-class。这些陈述看起来像:

<div ng-class="{ 'has-error': !frmSomeName.vcHeader.$valid && frmSomeName.vcHeader.$dirty }">
    <input type="text" name="vcHeader" ng-model="model.someText" ng-minlength="10" required />
</div>

我不喜欢声明的冗长,并且想用类似的东西替换它:

<div validation-state="frmSomeName.vcHeader">
    <input type="text" name="vcHeader" ng-model="model.someText" ng-minlength="10" required />
</div>

为了避免必须复制ngClass的行为,我希望指令添加ng-class指令。

这个plnkr演示了我尝试添加属性的方法,尽管它在最简单的场景中有效,但它有问题,并且不会在翻译(或其他更复杂的指令)中起作用。

我知道它因为滥用编译和链接阶段而无效,但是我不确定如何让它正常工作。因此我的问题是:如何从指令属性中添加不同的指令属性?

1 个答案:

答案 0 :(得分:0)

transclude指令中的元素没有接收相同的范围。如果您使用angualr $compile方法并将transclude指令的范围应用于子指令的范围,则它应该起作用。应将以下内容添加到simpleTransclude指令中:

  link: function(scope, element) {
    $compile( element.contents() )( scope )
  }

记得将$ compile传递给指令。

forked your plnkr并将simpleTransclude范围应用于其内容。