Angular 在指令中应用 class
Angular apply class in directive
我有一个 angular 指令,它将生成 bootstrap 表单组,查找 $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');
}
}
};
});
你能解释一下我如何达到预期的结果吗?
修改指令的编译 fn 内的元素,因为 at DOM 是普通的。然后重新编译 link 函数中的那个元素,它是来自编译函数的 return。
代码
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)
}
};
});
看相似
我有一个 angular 指令,它将生成 bootstrap 表单组,查找 $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');
}
}
};
});
你能解释一下我如何达到预期的结果吗?
修改指令的编译 fn 内的元素,因为 at DOM 是普通的。然后重新编译 link 函数中的那个元素,它是来自编译函数的 return。
代码
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)
}
};
});
看相似