Angular JS从指令传递参数到范围函数

时间:2014-02-10 08:36:25

标签: angularjs

假设我有这样的指令

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

如果我想将参数传递给我的作用域函数,我必须做scope.callback({myArg:'bla'})。我想知道是否有办法传递参数而不必指定其名称?

1 个答案:

答案 0 :(得分:1)

在这种情况下,使用可以使用共享服务并将其注入指令:

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

        var mySharedService = {};

        mySharedService.values = {};

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

        return mySharedService; 
   });

将其注入指令后。例如:

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

然后,您可以在控制器中获得必要的值。

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