2014-01-31 41 views

回答

24

您可以使用服務在控制器和指令之間進行通信。

服務可能是這樣的:

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

什麼是做它的優點這種方式通過使用$廣播/美元? – Strawberry

+3

廣播創建$ scope的依賴關係以及$ scope hiearchy。如果你依賴於你有很多被調用的可能對消息不感興趣的偵聽器,而顯式服務只針對那些需要它的組件。它還使測試變得更加容易,並且可重複使用和自包含。 –

相關問題