Angularjs 指令,具有多个行为,具体取决于属性或从DOM传递的值
我正在写一个指令,我希望这个指令根据我传递给它的值有不同的行为,这个值是静态的。理想情况下,我希望通过DOM中的一个属性传递值,甚至更好,我知道我可以只添加一个属性并检查它是否存在于链接函数中的attr对象中,但是有没有更好的方法,这里的最佳实践是什么 这是我的密码:Angularjs 指令,具有多个行为,具体取决于属性或从DOM传递的值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在写一个指令,我希望这个指令根据我传递给它的值有不同的行为,这个值是静态的。理想情况下,我希望通过DOM中的一个属性传递值,甚至更好,我知道我可以只添加一个属性并检查它是否存在于链接函数中的attr对象中,但是有没有更好的方法,这里的最佳实践是什么 这是我的密码: layout.directive('columnDirective', function() { return { require: 'ngModel', // scope: { // directiv
layout.directive('columnDirective', function() {
return {
require: 'ngModel',
// scope: {
// directive_type: '=test'
// },
link: function (scope, el, attrs, ngModel) {
if (!ngModel) return;
ngModel.$parsers.unshift(function (viewValue) {
var columns = scope.row.columns;
var column_total_before = 0;
angular.forEach(columns, function(column) {
var column_size = parseInt(column.size);
column_total_before = column_total_before + column_size;
});
if(attrs.typeOf != "add") {
//Remove current (prior to edit) value from total
column_total_before = column_total_before - ngModel.$modelValue;
var default_value = 1;
} else {
if (column_total_before == 12) {
var default_value = 0;
}
else {
var default_value = (12 - column_total_before);
}
}
//Convert string to integer
viewValue = parseInt(viewValue);
//Add total existing columns with new value
column_total = column_total_before + viewValue;
scope.column_total = column_total;
if(column_total >= 1 && column_total <= 12 && viewValue > 0) {
return viewValue;
} else if (isNaN(viewValue)) {
ngModel.$setViewValue(default_value);
return default_value;
} else if (column_total_before == 12 && viewValue == 0) {
return viewValue;
} else {
ngModel.$setViewValue(default_value);
ngModel.$render();
return default_value;
}
});
}
}
});
目前正在使用attrs.typeOf,在我的html中这很好,但我不知道这是否是最佳做法?您需要添加更多信息、您的目标、您假装实现的目标。。。不同的行为可能是简单的、复杂的,甚至是不值得的。我添加的代码有帮助吗?@Melbourne2991是的,你想使用隔离作用域吗?只有在我所做的违背最佳实践的情况下才行?正如我所说的,这个解决方案目前运行良好,但我不知道从长远来看,它是否会导致问题,或者是否有更好的方法,仍然可以理解范围并隔离范围。检查属性在链接函数中很常见。