2 回答

TA貢獻1830條經(jīng)驗 獲得超3個贊
過去,我已經(jīng)為這個問題寫了一些答案,它們基本上都歸結(jié)為同一件事。在Angular中$scope
,即使沒有明確引用它,也正在使用。
ControllerAs語法使Angular可以幫助您編寫更高效,更容錯的控制器。在幕后,當(dāng)您使用ng-controller="theController as ctrl"
Angular theController
時$scope
,將在上創(chuàng)建為屬性,并將其分配為ctrl
?,F(xiàn)在,您有了要從作用域引用的對象屬性,并且可以自動免受原型繼承問題的影響。
從性能的角度來看,由于您仍在使用$scope
,因此幾乎沒有性能差異。但是,由于您的控制器現(xiàn)在不再$scope
自己直接分配變量,因此不需要$scope
注入。而且,由于現(xiàn)在它只是一個普通的JavaScript函數(shù),因此可以更容易地對控制器進行隔離測試。
從前瞻性的角度來看,現(xiàn)在眾所周知Angular 2.0尚不具備$scope
,但將使用ECMAScript 6的功能。在Angular團隊發(fā)布的任何顯示遷移的預(yù)覽中,它們首先都是通過重構(gòu)控制器來消除的$scope
。如果您的代碼是在不使用$scope
基礎(chǔ)控制器的情況下設(shè)計的,那么遷移的第一步已經(jīng)完成。
從設(shè)計者的角度來看,ControllerAs語法使在對象的操作位置更加清晰。擁有customerCtrl.Address
和storeCtrl.Address
使您更容易識別出您有一個由多個不同的控制器為不同目的分配的地址,這要比兩者都使用的容易$scope.Address
。在頁面上具有兩個不同的HTML元素,這兩個HTML元素都已綁定{{Address}}
并且僅通過控制器知道該元素包含在哪個元素中,這是解決問題的主要麻煩。
最終,除非您嘗試啟動一個10分鐘的演示,否則您真的應(yīng)該使用ControllerA進行任何嚴(yán)肅的Angular工作。

TA貢獻1765條經(jīng)驗 獲得超5個贊
我肯定會推薦Controller As語法。
它更干凈,更高效,您可以組織更多代碼,這是AngularJS的新方法。
除非您與習(xí)慣于$ scope語法的團隊合作,否則請絕對使用Controller As。
添加回答
舉報