2016-10-10 204 views
0

在我的應用程序中,我使用this而不是$scope來保存變量和函數,並在HTML中使用控制器別名來訪問。

在這種情況下,如何更新我的視圖,做類似$digest()$apply()$scope

或者有必要注入$scope來做到這一點?

+0

您避免使用'$ scope'的任何特定原因?它用於視圖和控制器之間的數據綁定。 –

+0

使用'this'與保存變量和函數無關。如果你使用'$ scope',將會是相同數量的變量。 – charlietfl

+0

@SterlingArcher我沒有特別避開'$ scope',只是試着去尋找@john_papa風格指南(https://github.com/johnpapa/angular-styleguide/ blob/master/a1/README.md#controllers) – Lai32290

回答

1

controllerAs的方式與控制器中的$scope無關。這是避免$scope與模板之間的聯繫並提高可讀性的模式。但是,即使您使用的是controllerAs語法,也可以在控制器上注入$scope而不會出現問題。這就是controllerAs的意思,使用$scope來執行任務,例如$scope.$apply,但不能作爲視圖模型。

即使您使用的是controllerAs,注入$scope也不是一個錯誤的做法。但是,如果您使用$scope來像查看模型一樣工作,那將是一種不好的做法。無論如何,即使你不注入,$scope將以某種方式存在於控制器內部,它是控制器的一部分。 controllerAs的意思是將視圖模型的作用從$scope中分離出來。最終,視圖模型成爲示波器的一部分,但它與$scope的其他功能是分開的。

+0

因此,不錯的做法注入'$範圍'只是爲了更新我的看法,在這種情況下? – Lai32290

+0

即使使用'controllerAs',注入'$ scope'也不是一個壞習慣。但是,如果使用'$ scope'來像視圖模型一樣工作,那將是一個糟糕的做法。 –

+0

非常感謝你! – Lai32290

1

@ Lai32290良好的工作採用controllerAs公約!它節省了頭痛,並使嵌套示波器更清晰!至於您的問題,您無法避免使用$scope來撥打$digest$apply。請記住,在幕後,angularjs仍將controllerAs附加到$scope,所以它仍然存在。

當事件發生在角度生命週期之外時,您需要使用它 - 例如使用來自其他外部庫的套接字或事件。

http://www.codelord.net/2015/11/11/angular-controlleras-when-should-you-use-scope/

相關問題