2013-02-23 76 views
4

我想圍繞AngularJS包裹我的頭。我很喜歡它,但一個核心概念似乎在逃避我 - 模型在哪裏?AngularJS模型

例如,如果我有一個應用程序,例如,顯示多個事務列表。一個列表向服務器查詢符合某些標準的分頁交易集合,另一個列表使用不同的標準,但可能有一些交易符合兩個條件並最終在兩個列表中。現在:

  1. 出現在兩個列表中的事務應該是兩個範圍中的SAME對象,對不對?這不是數據綁定的大問題,所以一個地方的更新會被鏡像到另一個地方嗎?

  2. 事務可能具有複雜的行爲,抽象原始服務器API請求,要求後續查詢服務器以收集更多數據,監視自己是否有變化並將自己標記爲髒,所有這些事情都去了哪裏?

  3. 列表本身需要知道事務何時被刪除,因此在一個列表中刪除的同一事務將從另一列表中消失。

  4. 我們可能想緩存一些客戶端存儲風格的交易?

所以再次提出這個問題:所有這些都去了哪裏?它是否都被嵌套在$ rootScope中並且由控制器控制?委託給一個服務?

這裏的任何方向,無論多麼模糊,都不勝感激。

+0

問題標題似乎討論一個普遍的概念,而內容描述比例更特殊的情況。 – 2013-08-18 23:20:02

回答

8

有關Angular的一點是它將模型留給你。您不必擴展一些內置對象來使其工作,它可以是任何你想要的對象。 a)是的,但正如我所說,這取決於你。如果您願意,您甚至可以使用Backbones模型實現。

b)可能在你的模型對象中。 Angular提供您可以使用的資源服務。你可以在這些資源上定義你自己的方法,所以這將是一個很好的起點。

c)您的意思是GUI部分或業務邏輯? Angular爲你處理GUI。只需實現從列表中刪除事務的函數,Angular將爲您重新渲染它。

d)再次,這是由你來實現或使用庫。 Angular主要是一個GUI框架,對你的模型/持久層幾乎沒有看法。

對於你的最後一個問題;你會將大部分邏輯放在服務中。你的Angular控制器將被注入他們需要的服務,並通過範圍向視圖公開功能。您應該儘可能避免向根作用域添加內容,因爲它們在模板中基本上是全局的。

+0

很好的答案!我有點像解耦,但是重新實現這麼多角度的功能似乎是一種浪費。例如,擁有一個可以監視自身變化的模型就是角度範圍非常好的事情。重新設計一個完全獨立的系統以在模型上做到這一點,然後將其與角度的$ watch/$ apply /等整合似乎有很多不必要的批量和複雜性,不是嗎? – nicholas 2013-02-24 18:04:37

+2

我想這個問題變成了:有沒有一個很好的模型層,可以很好地與角度玩呢?我已經快速瀏覽了角度資源,以及其他一些框架,比如微風和放大。有什麼建議麼? – nicholas 2013-02-24 18:11:43

+0

您絕對不應該重新實現觀看模型更改。如果您需要觀察這樣的變化,則可能是因爲您可能希望用戶界面反映更改,因此應將該對象放在範圍內。業務層中對事件的需求依然存在,但這與觀察範圍不同。業務層事件在發生重大更改時觸發,例如保存對象,而不是更新對象上的屬性。你仍然可以使用Angulars $ rootScope來發出這些事件。 – 2013-02-24 18:20:01