2014-02-10 22 views
0

傳遞參數範圍功能角度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

回答

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