2014-01-28 2 views
4

Я пытаюсь передать один параметр из директивы в метод, определенный в контроллере.Как передать аргумент методу, определенному в контроллере, но вызванному из директивы в Angularjs?

Я использую изолированную область.

Вот соответствующий код и Demo in Fiddle:

HTML

<div ng-controller="MapCtrl"> 
     <map id="map_canvas" call='callMe()'></map> 
    </div> 

JS

var module = angular.module('googleMap', []); 

module.directive('map', function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope:{ 
      callMe : '&call' 
     }, 
     template: '<div></div>', 
     link: function(scope, element, attrs) { 
      console.log(element); 

      /* ... */     
      scope.callMe('hey'); 

      /* ... */         
     } 
    }; 
}); 

function MapCtrl($scope) { 

    $scope.callMe = function(val){ 
    alert(val); 
    }; 

} 

Почему я получаю val=undefined? Он должен быть hey

Спасибо,

ответ

6

Вам необходимо аннотировать параметры функции:

FIDDLE

Вид:

<map id="map_canvas" call='callMe(param)'></map> 

Директива:

scope.callMe({param: 'hey'}); 

Это explained in the docs (хотя и несколько неопределенно):

& или & атр - обеспечивает способ выполнить выражение в контексте родительской области. Если имя attr не указано, считается, что имя атрибута совпадает с локальным именем. Определенное и видимое определение области: { localFn: '& myAttr'}, затем изолировать свойство области localFn будет указывать на функцию-оболочку для выражения count = count + value. Часто желательно передать данные из изолированной области видимости с помощью выражения и в родительскую область, это можно сделать, передав карту локальных имен и значений переменных в оболочку выражения fn. Например, , если выражение является приращением (суммой), тогда мы можем указать значение , вызвав localFn как localFn ({amount: 22}).

Смежные вопросы