Angular directive how to add an attribute to the element?

前端 未结 2 1487
[愿得一人]
[愿得一人] 2020-11-27 04:43

I\'m wondering what\'s the way to do work this snippet:

//html

      
      
2条回答
  • 2020-11-27 05:10

    You can try this:

    <div ng-app="app">
        <div ng-controller="AppCtrl">
            <a my-dir ng-repeat="user in users" ng-click="fxn()">{{user.name}}</a>
        </div>
    </div>
    
    <script>
    var app = angular.module('app', []);
    
    function AppCtrl($scope) {
            $scope.users = [{ name: 'John', id: 1 }, { name: 'anonymous' }];
            $scope.fxn = function () {
                alert('It works');
            };
        }
    
    app.directive("myDir", function ($compile) {
        return {
            scope: {ngClick: '='}
        };
    });
    </script>
    
    0 讨论(0)
  • 2020-11-27 05:22

    A directive which adds another directive to the same element:

    Similar answers:

    • How to get ng-class with $dirty working in a directive?
    • creating a new directive with angularjs

    Here is a plunker: http://plnkr.co/edit/ziU8d826WF6SwQllHHQq?p=preview

    app.directive("myDir", function($compile) {
      return {
        priority:1001, // compiles first
        terminal:true, // prevent lower priority directives to compile after it
        compile: function(el) {
          el.removeAttr('my-dir'); // necessary to avoid infinite compile loop
          el.attr('ng-click', 'fxn()');
          var fn = $compile(el);
          return function(scope){
            fn(scope);
          };
        }
      };
    });
    

    Much cleaner solution - not to use ngClick at all:

    A plunker: http://plnkr.co/edit/jY10enUVm31BwvLkDIAO?p=preview

    app.directive("myDir", function($parse) {
      return {
        compile: function(tElm,tAttrs){
          var exp = $parse('fxn()');
          return function (scope,elm){
            elm.bind('click',function(){
              exp(scope);
            });  
          };
        }
      };
    });
    
    0 讨论(0)
提交回复
热议问题