I write below directive to make call a function when ngRepeat
element gets rendered on UI.
Directive
directives.directive('repeatDone', function() {
return {
restrict: 'A',
require: 'ngRepeat',
link: function(scope, element, attrs, ngModel) {
if (scope.$last) {
scope.$eval(attrs.repeatDone);
}
}
};
});
But it is giving $compile
error.
If I remove require part, it works OK.
Why AngularJS can not accept "require: 'ngRepeat'"? Help would appreciated.
require
is used for accessing the controller of another directive. But ng-repeat
does not have a controller. Take a look at the source for ng-repeat
, the word controller doesn't even appear in the code. The documentation also makes no mention of a controller for ng-repeat
.
Typically, when you use require
it's because you want to call functions of the required controller. In the link function for your directive you've added the argument ngModel
-- which is what would be populated with the controller if it existed. But you never use this ngModel
argument in the code. It's not really clear why you need to use require
at all in this case.
EDIT:
On further review, perhaps you're trying to require ng-repeat
because your repeat-done
directive won't work outside the context of an ng-repeat
. If that's the reason, another solution might be to traverse the DOM looking at the parent elements of your repeat-done
directive to see if they have the attribute 'ng-repeat'. If not found, your directive could throw an error. But that seems like a lot more code w/little return on investment...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With