2012-11-06 35 views
25

我正在通過關於the AngularJS home page的例子來看 - 特別是「添加一些控制」。我不太瞭解它如何映射到MVC模式。AngularJS真的是MVC嗎?

這或多或少清楚地表明模板(index.html)可以被看作是由TodoCtrl作爲控制器從todo.js構建的視圖,但是模型在哪裏?像ng-model這樣的屬性映射到框架的一些內部部分,並且不直接暴露我們可以稱爲模型的對象。

將AngularJS稱爲MVC框架是否正確?

回答

3

屬性映射到控制器中定義的範圍變量。例如,如果您有一些代表業務邏輯的JS對象,則可以將它們放在範圍變量中,然後可以將這些屬性映射到模型本身中,而不是在範圍變量中使用某些任意值。

+0

因此,主頁上的示例並不是真正的MVC?我需要更深入地瞭解AngularJS中的MVC嗎? –

+1

@PaulLysak在文檔中還有其他示例。你真的不需要一個單獨的「模型」,因爲它是MVC,而且MVC的定義有點鬆散。在你指的例子中,模型本質上是放在'$ scope'變量中的。這只是一個簡單的模型,僅用於單個控制器。 –

+0

謝謝,這澄清了很多! –

5

我沒有讀過Angular。但是,請記住,「真正的」MVC意味着模型包含業務邏輯,控制器負責將用戶輸入傳遞給模型,並且視圖從模型中獲取其自己的數據。許多所謂的MVC框架實際上並沒有以正確的方式實現MVC:它們負擔過重的責任,正如讓Controller負責更新View一樣。這不是控制器打算做的事情,在這種情況下,你會得到所謂的「胖控制器」。許多Web開發人員都認爲View只是一個「模板」。這是真的和假的;它是一個模板,但它直接從模型中獲取自己的數據 - 而不是通過控制器。

但是,當我開始說:我還沒有閱讀過Angular,但你可能有這樣的自己,你應該能夠找出Angular是否真的是一個MVC框架,通過查看框架中的不同組件確實。

+1

看到這篇關於MVC的文章http://r.je/views-are-not-templates.html – user1628524

20

MVC背後的核心思想是,在代碼中管理其數據(模型),應用程序邏輯(控制器)以及向用戶(視圖)呈現數據 之間有明確的代碼分離。 視圖從模型獲取數據以顯示給用戶。當用戶通過單擊或鍵入與應用程序交互時,控制器通過更改模型中的數據進行響應。 最後,該模型通知視圖發生了變化,以便它可以更新它顯示的內容 。 在角應用,所述視圖是文檔對象模型(DOM),則控制器 是JavaScript類,並且模型數據被存儲在對象屬性。

1

如果可以將數據存儲在對象中的任何內容都視爲模型,那麼可以將每個前端框架(視圖)視爲模型。它們都可以將數據存儲在對象中並將它們呈現在視圖中。我認爲調用一個mvc真的是一個營銷策略,試圖讓角度看起來更像它。

參見: https://www.pluralsight.com/blog/software-development/tutorial-angularjs-mvc-implementation

在控制器中,在這裏他們給它們的角的作爲模型的例子。如果它不能幫助存儲持久數據,那麼它就不是一個模型。