2015-02-06 53 views
4

這裏開始角度的開發者。角度控制器的要點是什麼?控制器的工作不能由指令完成嗎?

讓我開始說我非常喜歡角度,我認爲它是一個非常好的架構框架。

這就是說,我不明白爲什麼控制器存在。讓我來解釋一下:

從我的理解服務有一個明確的角色: 整個應用程序所需要的模型 2)執行業務邏輯 3:1)蓄能件)聊到服務器

的觀點: 1)顯示模型

指令: 1)創建範圍 2)暴露功能他們創造通過它們採取來自用戶的輸入和 一)改變模型 b)中操縱DO作用域M

控制器的要點是什麼?看起來指令被設計來執行控制器所做的所有工作。

控制器是否應該在指令操縱DOM時操縱模型?

回答

2

角度不是一個特別自負的框架,雖然有些人可能會告訴你它是。

控制器是訪問/創建範圍和將許多其他部件連接在一起的簡單方法。他們是靈活和容易的,適合'你只需要在這一點做點什麼東西'

指令應該是可重複使用和表達的,就像'給我一個使ajax請求的按鈕的東西'你想在5個地方。控制器對於這個任務沒有意義。

當你真的需要一個控制器時,使用一個指令非常重量級,可能有點醜,那就是我會看到差異點的地方。如此說來,如果你認爲它們更好,那麼在任何地方使用指令都不會阻止你。

+0

好的,謝謝你,這種確實有道理。爲什麼你說這個指令的重量更重呢?我的意思是不是ng-controller只是另一個指令? – pQuestions123 2015-02-06 01:24:41

+1

ng-controller是將控制器與元素相關聯的指令。控制器不是指令。我認爲這是'重量級',因爲你必須編寫更多的代碼來創建指令並對其進行單元測試。 – 2015-02-06 01:45:24

1

讓我們引述AngularJS文檔:

this chapter

什麼是指令?

在高層次上,指令是指示AngularJS的HTML編譯器($ compile)將指定行爲附加到該DOM元素的DOM元素(例如屬性,元素名稱,註釋或CSS類)上的標記,或者轉換DOM元素及其子元素。

that chapter

使用控制器:

  • 搭建$範圍對象的初始狀態。

  • 將行爲添加到$ scope對象。

不要使用控制器:

  • 操作DOM - 控制器應該只包含業務邏輯。將任何表示邏輯放入控制器中會嚴重影響其可測試性。對於大多數情況,Angular具有數據綁定,並且指令用於封裝手動DOM操作。

  • 格式輸入 - 使用角形式控制來代替。

  • 過濾器輸出 - 使用角度過濾器代替。跨控制器

  • 分享代碼或狀態 - 使用的角度,而不是服務。

  • 管理其它組件的生命週期(例如,創建服務實例)。

你得樣樣有,差不多。

微妙的一點是,因爲AngularJS僅在Html頁面和js代碼之上工作(而不是傳統的客戶端/服務器設置),服務器通常支持的視圖和「後端」全部嵌入相同的文檔和指令,作爲操縱DOM的工具,也是引導應用程序的核心功能,所以它必須是直接在那裏直接硬編碼應用程序的誘惑。這就是框架中已經發生的事情:特定的指令專用於控制器。

在MVC架構中,控制器有助於縮小視圖和模型,集中圍繞功能一組模型及其數據旋轉。它還有助於從什麼是業務邏輯描述屬於純UI的內容:除非您計劃提供新的功能,否則更改UI不應影響該邏輯。但是,由於平臺的限制,這裏的這些模式又重疊了。

決定性的參數可能如下:如果您沒有使用內置控制器模塊和指令,則必須派生新的指令以將UI入口點綁定到業務邏輯,並且在此過程中,您將重新創建對象控制器模式來保存這些入口點後面的代碼。

AngularJS很容易讓您和爲您提供了開箱即用。

或者,也許你會拿出一個alternative

相關問題