Search code examples
javascriptangularjsangularjs-ng-click

Call function within object as parameter for a directive


currently I'm extending my application, so I can give a directive (which generates a table grid) an object for additional buttons to show (for adding other other actions).

Now I can show the button but I need to execute some code as function which should be apply for a click on that button.

The object itself contains strings and function in a mixed way, like this:

<tablegrid
  table="flavorings"
  additional-buttons="[{name: 'add', onclick: 'function(){ }', icon: 'fa fa-plus'}]"
  show-actionbutton="true"
  show-rating="true"
  show-search="true"
  show-rowcheckbox="true"
  show-header="true">
</tablegrid>

My directive template looks like this:

<button ng-repeat="aB in additionalButtons" class="btn btn-primary" ng-click="ab.onclick" type="button">
  <i ng-class="aB.icon" ng-show="aB.icon  != ''" aria-hidden="true"></i>&nbsp;
  <span>{{ 'TABLEGRID_'+aB.name | uppercase | translate }}</span>
</button>

How can I execute the onclick-function?


Solution

  • You can directly call a function of an object of the scope in your view with:

    ng-click="yourObject.functionName(parameters)"
    

    Don't forget the parenthesis in the function call even if there is no parameters

    Here is a demo of how it works:

    var app = angular.module('myApp', []);
    
    app.controller('MyCtrl', function($scope) {
        $scope.additionalButtons = [
            {'name': 'First', 
             'onclick': function() {alert('1')}
            }, 
            {'name': 'Second', 
             'onclick': function() {alert('2')}
            }
        ];
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    
    <div ng-app="myApp" ng-controller="MyCtrl">
        <button ng-repeat="ab in additionalButtons" ng-click="ab.onclick()">Click {{ab.name}}</button>
    </div>