2015-11-03 36 views
1

在我的角度應用程序中,我有一個全局側邊欄導航指令,其中包括爲用戶提供的全局搜索(帶有一堆條件,而不僅僅是文本字段)。角度側邊欄搜索指令

在搜索時,我想用搜索結果顯示一個頁面。

現在,側邊欄在主應用程序html中定義,共享搜索結果數據的最佳方式是什麼? 側邊欄應該負責執行搜索嗎?如果是這樣,我怎麼把它的數據分享給特定的頁面結果呢? 另一方面,或許具體的搜索結果頁面應該負責這些數據?如果是這樣,在執行搜索時如何將它與側邊欄搜索參數連接起來?

這種情況下的任何最佳實踐表示讚賞。

+0

你肯定在側邊欄的指令,你的做法?對我來說,它是聖潔莫莉獨立的功能和_search_模塊。回答我這個問題 - 你使用'ui-router'嗎? – Appeiron

+0

是的,我使用ui路由器。你能提出更好的建議嗎? – shayy

回答

2

步驟,讓您更光明的前途:

  1. 獨立搜索模塊3個模塊:mainsidebarresults
  2. 翻譯他們每個人之間的數據有一個主要的SearchResultsService即:

    a)爲每個鍵獲取sidebar過濾器的集合truefalse(鍵爲GET參數的名稱,將用於傳遞到後端的搜索API);

    b)根據results模塊方法序列化或反序列化數據;

    c)做一些分頁;

    d)如果您需要(無限滾動功能),則保存或甚至緩存數據;

sidebarresults將意見main(子模塊),所以如果需要的話,你將能夠分享主控制器方法當我正面臨着實現這樣的模塊我的(小白方式)

已使用black magic轉義$watch$on事件系統。如果你還年輕 - 然後使用$on,這將允許您通知每個模塊有關重要的事情(如分頁更改,項目選擇等),並保持它們在同一時間分開。

您可以自由地將現有的側邊欄放在主模塊中,但我已經從指令移動到使用自己的控制器和模板進行查看。

指令用於粘貼功能的可重用項目。但是,dat sidebar顯然應該被定義爲應用程序(aka模塊)的獨立部分,但不是指令。

P.S.保持你的控制器簡單。 谷歌名單:

+0

如果你需要顯示類似於overlay_現有頁面的搜索結果頁面,你需要使用'ng-if'和'ng-view ='results'' – Appeiron

+0

謝謝,側邊欄應該是ui-路由器?那有什麼好處? – shayy

+0

否否否否否否。閱讀更多關於ui-router的信息。 'abstractState'只用於父狀態。在你的情況''sidebar'不是抽象的,而是包含在'main'模塊中的獨立視圖,它在整個應用程序結構之上。說到子模塊時,請勿操作'absctractState'。 – Appeiron