我可以通过使用控制器别名点(。)变量名来访问标记上的控制器变量,那么为什么我们需要单独使用$ scope ...我们可以互换地使用控制器上下文和$ scope吗?或者有一些具体的东西$ scope的设计。
答案 0 :(得分:1)
这是一个很好的问题,但可能过于宽泛而无法得到明确的答案。我会提出我的想法。
$ scope被设计为视图模型 - " VM"在MVVM模式中。
controller-as被引入以更密切地遵循MVC模式,其中$ scope继承是过度和不必要的。 " C"对应于Angular控制器,并允许视图直接触发控制器操作。
我认为控制器的引入是一个很好的改变。但我认为使用它的正确方法是调用控制器直接控制的方法。在我看来,我认为控制器作用域中的方法不应该向上传播$ scope堆栈,并在$ scope链上调用另一个方法。这样做会引入复杂的依赖关系,这很难理解和维护。控制器 - 防止这种情况。
虽然控制器可用于存储模型(不仅仅用于调用方法),但我不相信它应该存在。这是视图模型或$ scope的工作。我知道其他人可能会有不一样的感受。
答案 1 :(得分:0)
$ scope不是单件服务。意思是,当我们将它注入某个地方时,通常会创建一个新的子范围。因此,使用$ scope,我们可以为其所有父/子传播事件。
此外,我们可以在父作用域中存储一些“全局”变量方法。
如果使用controller-as
语法,则无法使用此嵌套。但代码变得更容易预测。