2016-10-10 138 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/

相关问题