2014-01-31 2 views

ответ

24

Вы можете использовать услугу для связи между контроллером и директивой.

Service может выглядеть следующим образом:

app.service("directiveService", function() { 
    var listeners = []; 
    return { 
     subscribe: function(callback) { 
      listeners.push(callback); 
     }, 
     publish: function(msg) { 
      angular.forEach(listeners, function(value, key) { 
       value(msg); 
      }); 
     } 
    }; 
}); 

И директива может ответить на службу:

app.directive("jQueryDirective", function(directiveService) { 
    directiveService.subscribe(function(msg) { 
     // pretend this is jQuery 
     document.getElementById("example") 
     .innerHTML = msg; 
    }); 
    return { 
     restrict: 'E'   
    }; 
}); 

Просто заменить то, что я сделал для манипуляций JQuery, и вы должны иметь то, что вам нужно.

Вот рабочая скрипку: http://jsfiddle.net/jeremylikness/wqXYx/

+1

Каковы преимущества делают это таким образом, используя $ broadcast/$ on? – Strawberry

+3

Трансляция создает зависимость от $ scope, а также от $ scope hiearchy. Если вы полагаетесь на то, что вы вызываете много слушателей, которые могут или не должны быть заинтересованы в сообщении, в то время как явная служба предназначена только для компонентов, которые в ней нуждаются. Это также облегчает тестирование, является многоразовым и самодостаточным. –

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