trivektor
trivektor

Reputation: 5638

Angular JS passing parameter to scope function from directive

Assume that I have a directive like this

<div my-directive callback='doSomething(myArg)'></div>

angular.module('directives').directive('myDirective', function() {
   return {
      restrict: 'A',
      scope: {
        callback: '&'
      },
      link: function(scope, element, attrs) {
        element.bind('someEvent', function() {
          scope.callback({myArg: 'bla'});
        });
      }
   }
});

If I want to pass a parameter to my scope's function, I have to do scope.callback({myArg: 'bla'}). I wonder if there's a way pass the argument without having to specify its name?

Upvotes: 0

Views: 1023

Answers (1)

Artyom Pranovich
Artyom Pranovich

Reputation: 6962

Use can use shared service in this case and inject it to directive:

    angular.module("yourAppName", []).factory("mySharedService", function($rootScope){

        var mySharedService = {};

        mySharedService.values = {};

        mySharedService.setValues = function(params){
            mySharedService.values = params;
            $rootScope.$broadcast('dataPassed');
        }

        return mySharedService; 
   });

And after inject it to directive. For example:

app.directive('myDirective', ['mySharedService', function(mySharedService){
    return {
        restrict: 'C',
        link: function (scope, element, attrs) {
            mySharedService.setValues(//some value//);
        }
    }
 }]);

Then, you can get necessary value in controller.

function MyCtrl($scope, mySharedService) {
   $scope.$on('dataPassed', function () {
       $scope.newItems = mySharedService.values;
   });
}

Upvotes: 1

Related Questions