Angular 1 $scope和Controller as,$scope何时消失?

4
自从“Controller as”存在以来,它不存在于Angular 1.2中,Angular 1.2是在2013年底发布的。为什么人们、书籍、博客和教程仍然在2014年或2015年使用$scope编写代码呢?
我见过有1到2年经验的人在2015年或2016年仍然使用Angular 1.1或Angular 1.2的编程风格,他们在Angular 1.5中迷失了方向,例如不使用组件。
招聘要求Angular只要求“Angular程序员”,他们知道每个人都以不同的方式使用Angular,例如使用$scope,或者只是指令而不是组件,或者他们不使用ES2015和babel?
我从未真正理解这一点。$scope到底何时消失了? 如果这个问题不适合在stackoverflow上发布,那我可以在哪里发布?
1个回答

2

Scope并没有消失,而且可能永远不会消失。人们普遍认为controllerAs特性来替代了scope,但实际上并非如此。实际上,controllerAs用于废弃scope的viewmodel职责。在此之前,每个模板的viewmodel成员都是在组件作用域中声明的,现在则在组件类的this中声明,并最终成为一个成员,将viewmodel的所有功能隔离在单个作用域成员内部。

使用controllerAs来处理你的viewmodel是一种很好的做法,但是你仍然需要scope来做一些scope的事情,例如发射和监听事件、处理循环等。因此,controllerAs的出现是为了将viewmodel与真正的scope职责分开。所以,scope从未真正消失,只是稍微改变了如何使用它的方式,增加了一个优化的特性。

无论如何,这并不意味着使用旧的scope方式是不好的,也不意味着使用控制器而不是组件是不好的。在大型项目中采用这样的做法是非常推荐的,这比在小型项目中使用更有意义。此外,旧项目是使用旧版的angularjs特性构建的,因此像将整个项目迁移到新的controllerAscomponents方式这样的突然变化并不是一件容易的事情,尤其是对于大型项目而言。


1
通过一些努力,你可以完全消除在代码中使用 $scope 的必要性。请参考:http://www.technofattie.com/2014/03/21/five-guidelines-for-avoiding-scope-soup-in-angular.html,因此我认为有些项目可以不使用 scope 来编写。 - stackdave
1
@stackdave 如果你有机会从头开始编写项目,可以考虑使用John Papa提出的风格指南https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md。 - lenilsondc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接