personalizadas directivas crear atributo agregar angularjs angularjs-directive

angularjs - directivas - Directiva angular cómo agregar un atributo al elemento?



directivas personalizadas angular 5 (2)

Una directiva que agrega otra directiva al mismo elemento:

Respuestas similares:

Aquí hay un 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); }; } }; });

Solución mucho más limpia: no usar ngClick en absoluto:

Un 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); }); }; } }; });

Me pregunto cuál es la manera de trabajar este fragmento:

//html <div ng-app="app"> <div ng-controller="AppCtrl"> <a my-dir ng-repeat="user in users">{{user.name}}</a> </div> </div> //js var app = angular.module(''app'', []); app.controller("AppCtrl", function ($scope) { $scope.users = [{name:''John'',id:1},{name:''anonymous''}]; $scope.fxn = function() { alert(''It works''); }; }) app.directive("myDir", function ($compile) { return { link:function(scope,el){ el.attr(''ng-click'',''fxn()''); //$compile(el)(scope); with this the script go mad } }; });

Sé que se trata de la fase de compilación, pero no entiendo el punto, por lo que una breve explicación sería muy apreciada.


Puedes intentar esto:

<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>