javascript - AngularJS attribute directive. How to add another attribute directive on 'compile' -
i create attribute directive add icon on button when it's disabled.
however, add ng-disabled
directive on compile
(with same disabled-button
value)
what best way ?
if add attribute ng-disabled
on compile function, never compile. so, if re-compile element on link
function, have remove ng-tranclude
directive due error. more, events, ng-click
, triggered twice.
bonus question: possible restrict attribute directive html elements <a>
or <button>
?
thx
i'm afraid cannot add directives dynamically element contains directive. reason compile
function called after angular has processed directive's element , determined directives attached it. adding attribute @ point late, discovery has taken place.
there may ways don't know of (and interested in seeing stable, non-hackish one).
i can suggest alternative may suit you: manually place ng-disabled
on button, brevity , consistency let expression of ng-disabled
drive directive, i.e.:
<button ng-click="ctrl.click()" ng-disabled="ctrl.disabled" disabled-button>
directive code:
.directive('disabledbutton', function($parse) { return { restrict: 'a', transclude: true, scope: { }, template: '<span ng-show="disabled">x</span><span ng-transclude></span>', link: function (scope, elem, attrs) { var disabled = $parse(attrs.ngdisabled); scope.disabled = false; scope.$watch( function() { return disabled(scope.$parent); }, function(newval) { scope.disabled = newval; } ); } }; })
fiddle: http://jsfiddle.net/3orwupo5/1/
or can manually set disabled
property of button: http://jsfiddle.net/y5ezvj5l/
Comments
Post a Comment