Username 然而,当我尝试将它变成指令时,它的 ng-class 部分停止工作。谁能-6ren">
gpt4 book ai didi

javascript - 如何在指令中使用 $dirty 获得 ng-class?

转载 作者:行者123 更新时间:2023-11-29 18:17:36 26 4
gpt4 key购买 nike

我有以下 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-class 部分停止工作。谁能帮我让它工作?

指令:

 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>

最佳答案

这是一个笨蛋:http://plnkr.co/edit/3AFOHZFgExZKHjnd3gb0?p=preview

当您在编译函数中替换一个元素时,您应该:

指令:

app.directive('smartInputElement', function($compile) {
return {
restrict: 'E',
priority: 1001,
terminal: true,
compile: function(tElm, attrs) {
var template = angular.element(
'<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="' + attrs.ngModel + '" placeholder="' + attrs.name + '">' +
'</div>');

tElm.replaceWith(template);
var fn = $compile(template);
return function(scope) {
fn(scope);
};

}
};
});

关于javascript - 如何在指令中使用 $dirty 获得 ng-class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com