说了指令递归的坑,我们再来说说ControllerAs的坑吧。
我一开始接触angularjs,已经是1.6版本,是1.x中的高版本。众所周知,在1.5之后,angularjs加入了component书写体验。在component中,我们的模板默认有一个叫$ctrl的组件Controller实例对象绑定在$scope中。在习惯了高版本的这种书写体验后,我参与了一个,低版本项目,于是乎,我觉得我在ng坑的道路上越走越远了。。。
1.3版本之后,angularjs推出ControllerAs的语法,意在创建一个Controller的实例来避免由$scope带来的作用域混乱的问题(这也是个坑,下一篇文章我们详细谈一下$scope的坑)。
话说这个问题时如何发现的,本人在遇到指令递归坑的时候曾经测试过版本兼容的问题,我将自己demo中ng的版本降至了1.4.6来查看指令递归是否与版本有关系时,以外的发现我之前写的xxController as $ctrl
居然意外报错了。。。
<div ng-app="text">
<div ng-controller="testController as $ctrl"></div>
</div>
<script src="angular-1.4.6.js"></script>
<script>
angular.module('text',[]).controller('testController', function () {
var $ctrl = this
console.log($ctrl);
})
</script>
错误内容如下:
由错误信息可以看出,别名中是不允许有$
符号存在的。当版本升至1.4.9时,便没有这个问题了。
总结
由于并没有测试1.4.7与1.4.8这两个版本,我不便妄加断言,可以肯定的是1.4.9以上,在ControllerAs的别名中可以有$
符号存在。
网友评论