我建议您使用的最简单方法是,可以通过在这些字段上使用watch来放置这些类,这
watcher将
postlink在编译DOM之后位于函数内
return function($scope, element) { fn($scope); $scope.$watch(function(){ return $scope.modalForm.name.$invalid && $scope.modalForm.name.$touched; }, function(newVal){ if(newVal) element.addClass('has-error'); else element.removeClass('has-error'); }) $scope.$watch(function(){ return $scope.modalForm.name.$valid && $scope.modalForm.name.$touched; }, function(newVal){ if(newVal) element.addClass('has-success'); else element.removeClass('has-success'); })}在这里演示
更新资料
实际的更好方法是代替编译元素,我们需要函数本身
$compile的元素
link。在链接fn中使用DOM进行编译的原因
$compile是,我们的
ng-class属性确实包含范围变量,例如
myForm.name.$invalid,因此,当我们
$compile使用DOM编译功能时,
myForm.name.$invalid由于编译无法访问范围,因此它们不评估变量的值。永远是
undefined或
blank。因此,尽管在内编译DOM时
link将具有所有包含的作用域值,
myForm.name.$invalid所以在使用指令作用域进行编译后,您将获得
ng-class指令绑定有效的功能。
码
compile: function(element) { //..other pre will be as is.. element.removeAttr("nx-validate"); //var fn = $compile(element); //remove this line from compile fn return function($scope, element) { //fn($scope); $compile(element)($scope); //added in postlink to compile dom to get binding working } }更新的Plunkr



