2016-12-26 116 views
4

既然存在「控制器爲」,它是不存在的,因爲角1.2? 2013年底發佈?爲什麼人們,書籍,博客和教程已經用$ scope編寫代碼,仍然在2015,2014年?

我見過的人,在2015年和2016年採用了棱角分明1.1或1.2角的編程風格1或2年的工作經驗,他們與角1.5丟失,例如不使用的部件。

喬布斯使用$範圍要求的角度自討苦吃'角程序員,他們知道有使用不同方式的每一個角度很大的差異的人,通過實例,或者只是指令,而不是組件,或者他們不使用ES2015與巴貝爾?

我一點都不明白。 $範圍真的死了? 如果這個問題不是爲了stackoverflow,我可以發佈它?

回答

2

範圍不是死了,而且很可能永遠不會這麼做。通常認爲controllerAs功能取代了scope,但它沒有。其實,controllerAs來貶低的scope,在視圖模型的責任之前,所有每個模板的視圖模型的成員被宣佈組件範圍時,現在它宣佈對組件的this類,並在年底,它成爲範疇成員在內部單個作用域成員中隔離viewmodel的所有功能。

使用controllerAs來處理你的viewmodel是一個非常好的做法,但是,你仍然需要scope來做,比如說,scope的東西。例如,發出並聽取事件,處理消化週期等。因此,controllerAs將與真正的scope職責分開。所以,範圍從來沒有真的死過,只是改變了如何使用它一點優化的功能。

不管怎麼說,這並不意味着使用舊的範圍的方式是不好的或使用的控制器,而不是零件,它們。高度推薦採用這種做法,在大型項目中,它比小型項目更有意義。此外,舊的項目使用舊angularjs內置功能,因此,像整個項目移動到新的方式controllerAscomponents的突然變化是不是便宜容易的事,特別是具有大型項目。

+1

通過一點工作,您可以完全消除使用$ scope拋棄代碼的需要。看看:http://www.technofattie.com/2014/03/21/five-guidelines-for-avoiding-scope-soup-in-angular.html,所以我認爲一些項目可以寫出沒有範圍 – stackdave

+1

@stackdave如果你有機會從頭開始編寫項目,你可以考慮使用John Papahttps提出的風格指南://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md –