Javascript 如何在指令中使用$dirty working获得ng类?

Javascript 如何在指令中使用$dirty working获得ng类?,javascript,angularjs,Javascript,Angularjs,我有以下html,当使用$dirty更改输入时,它可以工作并更改div的类: <div class="text-input" ng-class="{typing : (loginForm.test.$dirty || loginForm.test.length > 0)}"> <span>Username</span> <input type="text" name="test" ng-model="user.name" placehold

我有以下html,当使用$dirty更改输入时,它可以工作并更改div的类:

<div class="text-input" ng-class="{typing : (loginForm.test.$dirty || loginForm.test.length > 0)}">
  <span>Username</span>
  <input type="text" name="test" ng-model="user.name" placeholder="test">
  </div>
然而,当我尝试将其变成一个指令时,它的ng类部分停止工作。有人能帮我把它弄好吗

指令:

 angular.module('myApp').directive('smartInputElement',function(){
 return {
   restrict: 'E',
   require: 'ngModel',
   compile: function(element, attrs) {
   element.replaceWith('<div class="text-input" ng-class="{typing :  ('+attrs.formname+'.'+attrs.name+'.$dirty || '+attrs.formname+'.'+attrs.name+'.length > 0)}">'+
  '<span>'+attrs.label+'</span>'+
  '<input type="text" name="'+attrs.name+'" ng-model="ngModel" placeholder="'+attrs.name+'"></div>');
   }

 }
})

该指令的html为:

 <smart-input-element name="username" formName="loginForm" label="Username" ng-model="username"></smart-input-element>
这是一个扑克牌:

替换编译函数内的元素时,应:

手动编译并链接新模板。 终止同一元素上的所有指令。 检查以下答案: 指令:

 angular.module('myApp').directive('smartInputElement',function(){
 return {
   restrict: 'E',
   require: 'ngModel',
   compile: function(element, attrs) {
   element.replaceWith('<div class="text-input" ng-class="{typing :  ('+attrs.formname+'.'+attrs.name+'.$dirty || '+attrs.formname+'.'+attrs.name+'.length > 0)}">'+
  '<span>'+attrs.label+'</span>'+
  '<input type="text" name="'+attrs.name+'" ng-model="ngModel" placeholder="'+attrs.name+'"></div>');
   }

 }
这是一个扑克牌:

替换编译函数内的元素时,应:

手动编译并链接新模板。 终止同一元素上的所有指令。 检查以下答案: 指令:

 angular.module('myApp').directive('smartInputElement',function(){
 return {
   restrict: 'E',
   require: 'ngModel',
   compile: function(element, attrs) {
   element.replaceWith('<div class="text-input" ng-class="{typing :  ('+attrs.formname+'.'+attrs.name+'.$dirty || '+attrs.formname+'.'+attrs.name+'.length > 0)}">'+
  '<span>'+attrs.label+'</span>'+
  '<input type="text" name="'+attrs.name+'" ng-model="ngModel" placeholder="'+attrs.name+'"></div>');
   }

 }

非常感谢你的帮助。这起作用了。我花了太多时间在这上面,还没有完全弄清楚问题可能是什么。只是想跟进一下——伊兰,你认为这是最好的方法吗?在指令中是否有比使用compile更好的方法来实现这一点?非常感谢您的帮助。这起作用了。我花了太多时间在这上面,还没有完全弄清楚问题可能是什么。只是想跟进一下——伊兰,你认为这是最好的方法吗?在指令中是否有比使用compile更好的方法来实现这一点?