从指令

问题描述:

传递参数范围功能角度JS假设我有这样从指令

<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'})。我想知道是否有办法通过论证而不必指定其名称?

+0

没有其他办法,您可以通过隔离范围使用服务或2种方式的数据绑定,但这些方式甚至比传递命名参数更具礼貌性。 –

+0

我想你可以使用pub/sub服务,如果你感兴趣,我为Angular创建了一个。 – glepretre

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

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