Angularjs 指令,具有多个行为,具体取决于属性或从DOM传递的值

Angularjs 指令,具有多个行为,具体取决于属性或从DOM传递的值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在写一个指令,我希望这个指令根据我传递给它的值有不同的行为,这个值是静态的。理想情况下,我希望通过DOM中的一个属性传递值,甚至更好,我知道我可以只添加一个属性并检查它是否存在于链接函数中的attr对象中,但是有没有更好的方法,这里的最佳实践是什么 这是我的密码: layout.directive('columnDirective', function() { return { require: 'ngModel', // scope: { // directiv

我正在写一个指令,我希望这个指令根据我传递给它的值有不同的行为,这个值是静态的。理想情况下,我希望通过DOM中的一个属性传递值,甚至更好,我知道我可以只添加一个属性并检查它是否存在于链接函数中的attr对象中,但是有没有更好的方法,这里的最佳实践是什么

这是我的密码:

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是的,你想使用隔离作用域吗?只有在我所做的违背最佳实践的情况下才行?正如我所说的,这个解决方案目前运行良好,但我不知道从长远来看,它是否会导致问题,或者是否有更好的方法,仍然可以理解范围并隔离范围。检查属性在链接函数中很常见。