Enable/Disable Anchor Tags using AngularJS

后端 未结 11 1591
一整个雨季
一整个雨季 2020-12-01 05:45

How do I enable/disable anchor tags using the directive approach?

Example:

  1. while clicking on edit link, create & delete needs to be disabled or g
11条回答
  •  盖世英雄少女心
    2020-12-01 06:33

    Update: Disabling the href works better in the link function return. Code below has been updated.

    aDisabled naturally executes before ngClick because directives are sorted in alphabetical order. When aDisabled is renamed to tagDisabled, the directive does not work.


    To "disable" the "a" tag, I'd want the following things:

    1. href links not to be followed when clicked
    2. ngClick events not to fire when clicked
    3. styles changed by adding a disabled class

    This directive does this by mimicking the ngDisabled directive. Based on the value of a-disabled directive, all of the above features are toggled.

    myApp.directive('aDisabled', function() {
        return {
            compile: function(tElement, tAttrs, transclude) {
                //Disable ngClick
                tAttrs["ngClick"] = "!("+tAttrs["aDisabled"]+") && ("+tAttrs["ngClick"]+")";
    
                //return a link function
                return function (scope, iElement, iAttrs) {
    
                    //Toggle "disabled" to class when aDisabled becomes true
                    scope.$watch(iAttrs["aDisabled"], function(newValue) {
                        if (newValue !== undefined) {
                            iElement.toggleClass("disabled", newValue);
                        }
                    });
    
                    //Disable href on click
                    iElement.on("click", function(e) {
                        if (scope.$eval(iAttrs["aDisabled"])) {
                            e.preventDefault();
                        }
                    });
                };
            }
        };
    });
    

    Here is a css style that might indicate a disabled tag:

    a.disabled {
        color: #AAAAAA;
        cursor: default;
        pointer-events: none;
        text-decoration: none;
    }
    

    And here is the code in action, with your example

提交回复
热议问题