2014-02-10 3 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: 'бла'}). Интересно, есть ли способ передать аргумент, не указывая его имя?

+0

Нет другого способа, вы могли бы использовать сервис или привязку двухсторонней привязки через область изоляции, но у них есть еще больше церемоний, чем просто передача по именованному параметру. –

+0

Я думаю, вы могли бы использовать паб/под-сервис, я создал один для 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; 
    }); 
} 
Смежные вопросы