2

我對某個網頁有關於商品搜索的問題。從指令訪問父控制器方法?

比方說,我有:

  1. 一個控制器結果項中顯示
  2. 一個服務執行搜索查詢,所以它更新結果項交互控制器以顯示
  3. A 指令其中有形式與所有搜索字段的輸入。

其中一個按鈕是「查看更多項目」按鈕。只有當我從查詢中收到的回覆告訴我有更多要查看的項目時,纔會顯示它。

我做了服務,檢查此屬性,並返回一個boolean值以指令,其與NG秀使用它上的按鈕來顯示或隱藏其內的功能。

問題是我不知道如何在此範圍內與控制器進行交互。

如若指令調用一個服務方法並且此方法應以某種方式控制器互動?

在此之前,我與包裝形式的標籤指令(該指令的範圍之外),然後我可以用NG-提交控制器上執行一些動作來調用服務。就像這樣:

<form ng-submit="myController.submitSearch"> 
    <search-options-directive></search-options-directive> 
    <button type="submit"> 
</form> 

但現在我想要做的是把形式和內部

<search-options-directive></search-options-directive> 

按鈕所以現在我沒有訪問調用控制器方法直。

我該如何解決這個問題?

+0

這聽起來像是search-directive中「require」選項的主要示例 - 簡而言之:創建一個外部指令,其控制器是「項目顯示控制器」。然後您可以在搜索指令中要求外部指令,並且您可以直接訪問控制器。這裏是一些指定require的編譯服務的參考:https://docs.angularjs.org/api/ng/service/$compile –

+0

其他答案可能更好,但也有'scope。$ parent'屬性。 – Casey

回答

0

我的答案是更具體一點,你的標題,「從指令訪問父控制器的方法。「在你的指令,你必須補充一點,你要共享的方法:

return { 
    scope: { 
    myFavoriteMethod:'&' 
    } 
} 

然後在:

<search-options-directive my-favorite-method="myMethodOnTheParentController"></search-options-directive> 

在你的指令,你需要添加到您的HTML:

ng-click="myFavoriteMethod()" 

但在你的例子中,你正在使用一個ng表達式來綁定表達式與onsubmit事件(覆蓋原始提交動作),這與ng-click不同,但你應該能夠使用相同的patte RN。

+0

感謝您的反饋。我真正想知道的是做我想做的最好的做法,因爲我不知道採取的方法,因爲它似乎有3個非常相互依賴的元素。 – jeffarese

+0

最好的做法是遵循基本的礦權封裝等。爲此,我建議將它作爲您自己的指令,然後修改我的示例以使用ng-submit而不是ng-click。 – Fred

+0

任何通過物業我不意味着住房,哎呀! – Fred