2013-07-03 94 views
3

我有一個應用程序在一個頁面(主頁)中顯示新聞訂閱源,而在另一個應用程序中顯示用戶的訂閱源(用戶配置文件頁面)。Angularjs在控制器之間共享方法

這兩個頁面的外觀和行爲都是相同的。內容的變化是由於不同的網址所致。

如何在angularjs中解決這個問題?

我有一個家庭控制器,具有用於顯示主頁的所有方法/邏輯。

現在我需要一個更多的控制器,調用其他URL並做與家庭控制器相同的事情。

我在想父母控制器和兩個控制器。但看起來像在angularjs控制器中繼承是由dom結構決定的。就我而言,它們是兩個不同的頁面。所以我不能創建一個DOM風格的繼承。

我很困惑如何解決這個問題,而無需複製兩個控制器中的代碼。

如果需要,我很樂意爲此問題添加更多詳細信息。我經歷了一些谷歌的結果,但我無法弄清楚如何做到這一點。

回答

3

服務(而不是控制器)應該擁有域模型,並提供model API給應用程序的其餘部分(通常是控制器)以供使用。

我建議至少有兩項服務,一項針對您的新聞推送,一項針對您的個人資料,另外一項針對任何共享功能(這些功能可以作爲參數傳遞一個集合或一個單獨的帖子)。將適當的服務注入每個控制器。

「外觀」應該位於您使用ng-view或ng-include引入的HTML模板中。模板的ng-repeat將引用一個集合,該集合是一個$ scope屬性,它是對存儲在其中一個服務中的數據的引用。

對於新聞推送服務,以及如何控制器可獲取數據的引用的一個例子,看到Should services expose their asynchronicity?

我不會擔心重複使用$ HTTP服務,並返回一個承諾所需的代碼在每項服務中。有一天,您的個人資料頁面可能會開始看起來/行爲不同於您的新聞源頁面。

2

拉你的邏輯用於格式化和顯示到實用程序的角度服務(app.factory)。然後你可以將它注入到兩個控制器中,並以這種方式分享邏輯。

+0

假設我有一個元素像'ng-class =「getClassForThisElement()」',如果我把getClassForThisElement()放在服務中,它會工作嗎?這是正確的做法嗎? –

+0

是的。在你的「getClassForThisElement」方法中,調用你的服務並返回值。 – frosty

+0

如何從範圍變量中刪除元素?我應該將整個範圍傳遞給我的服務方法嗎? –

相關問題