2016-12-08 20 views
0

我正在學習AngularJS,目前在this的教程階段。完整代碼available here on Github
有哪些具有以下功能的控制器組件:在控制器中設置模型值的優勢與AngularJS中的模板相比有什麼優勢?

self.setImage = function setImage(imageUrl) { 
    self.mainImageUrl = imageUrl; 
}; 

這是真正的Click事件處理程序用於img元素的方法:

<img ng-src="{{$ctrl.mainImageUrl}}" class="phone" /> 
... 
<ul class="phone-thumbs"> 
    <li ng-repeat="img in $ctrl.phone.images"> 
    <img ng-src="{{img}}" ng-click="$ctrl.setImage(img)" /> 
    </li> 
</ul> 
... 

那麼有什麼優點以處理上述事件而不是:

<img ng-src="{{img}}" ng-click="$ctrl.mainImageUrl = img" /> 

? 它是否與保持視圖外的邏輯處理有關?任何其他考慮?

回答

1

通常,Angular中的HTML被視爲「視圖」或「模板」。所以這裏至少有兩個原則:

  1. 在MVC方法中,你希望你的Views是「啞」。基本上,這個 是一個粗略的說法,不要把邏輯放到你的Views中。

  2. 從Web開發的角度來看,該模板是聲明性的 部分。所以,你的HTML應該是聲明性的,而不是功能性的。

最後,另一個原因是保持控制器中的功能代碼增加了代碼的可讀性。其他開發人員知道要在控制器中查找邏輯,並且在邏輯中存在錯誤時不需要在View中搜索。

所有的說法,我不時打破這些規則爲了方便。

2

是的,基本上,這只是爲了分離擔憂。

由於您需要執行的代碼只是一行,因此這是一種邊緣情況。在這種情況下,這確實只是一個意見問題,有些人喜歡在HTML中有些人不喜歡。

很顯然,如果您在.js文件中編寫Javascript代碼,您將獲得智能感知和語法突出顯示等內容,因此更容易發現錯誤。 +你的代碼可以被刪除。 :-)

此外,我建議學習Angular 2而不是1. Angular 1現在是多餘的。

+1

是的,但我血腥仇恨打字稿。 *個人問題* – Jhecht

+0

但不是1.5.x真的是Angular 2的墊腳石,更像是2比1? – PakiPat

+0

是的,你是對的,新框架更優雅,並使用最新版本的JavaScript等,所以它是經驗豐富的開發人員的建議選擇,除非你有更低的瀏覽器要求。然而,如果你正在學習,那麼Angular 1可能更好,因爲它更簡單一些。另外,請接受本頁面上的答案之一:-) – Baconbeastnz