這是可能的,但你的問題是不知道如何獲得API。這是如何從父母那裏得到它。您正在通過使用「範圍」選項創建isolate scope。你也使元素類型的指令,所以我猜你在做這樣的事情:
<my-parent>
<my-child></my-child>
</my-parent>
其中<my-parent>
是父的指令,並<my-child>
是要公開的API指令。
真正的問題是你想要在這裏實現的。完全有辦法做你在問什麼。僅僅因爲範圍是孤立的並不意味着你無法實現。您可以遍歷父級$ scope的$$ childHead/etc列表來查找想要訪問其API的子級。您在孩子中定義的任何內容如下:
$scope.myApiFunction = function() {
};
將在此處可見。 (事情,你把「這個」不會 - 使用$範圍存儲桶代替。)
這意味着,如果你只有一個孩子,你可以做這樣的事情從父控制器:
$scope.$$childHead.myApiFunction();
簡單。另外,非常粗糙。這裏有很多問題:如果你有很多孩子會怎麼樣?如果這個孩子的API結束了一級,該怎麼辦?等等。它打破了各種面向對象的模式,而且它會變得混亂,快速。
你的問題非常抽象 - 如果你用一個確切的例子更新它可能會很好。沒有這個,讓我猜你的目標。有兩種方法可以在Angular內鼓勵「像這樣」:
服務。每當你說「API」時,首先想想服務。服務是一個單獨的(自動),因此它是爲創建API而量身定做的。而且服務可以使用Factory模式返回一個類型的對象,所以這些是爲了做一些事情而設計的,比如有一個管理服務處理,比如在IM客戶端中的好友列表,使用創建,刪除和查找好友的API方法。
在定義時向其父母添加「可選」功能的項目。比方說,我們有三種可能的工具提示類型:具有懸停效果的工具提示,具有點擊效果的工具提示以及按某種順序由「漫遊」系統觸發的工具提示。對於這種事情,在容易的事剛好相反的API,像這樣:
父控制器:
$scope.tooltipHandler = {
showTooltip: function() {},
hideTooltip: function() {}
};
兒童控制器:
$scope.$parent.tooltipHandler = {
showTooltip: function() {
// Do some real work
},
hideTooltip: function() {
// Do some real work
},
}
什麼在這裏發生是否定義了任何工具提示,當父級運行時,沒有任何反應。如果添加藍色工具提示顯示模塊,則當父級現在運行其演練時,它將顯示藍色工具提示。
有意義嗎?
把功能於一身的服務,並通過注入其共享服務在你需要它的應用 – charlietfl
你怎麼會在這種情況下初始化服務有,我要公開的功能呢?換句話說,我怎麼能在服務內部鏈接'method1'。 –
把對象/數組或其他任何你想要在服務中進行製作,並創建getter和setter方法來修改它 – charlietfl