实名反对 @林丰 的答案,显然其没有真正用过 Angular。
虽然误导还没开始用的人用处不大,不过还是反对任何形式的误导。
1. ng-class完全不会使用。
<div class = test ng-class = {true:”haha”,false:”nohaha”}[ha]>ng-class中是一个Angular Execution Context,其求值结果要么是1.字符串 2.对象 3.前两者的数组。
可以直接使用对象,无需写个字典查找。
对于每个Key-Value-Pair,当Value为truthy的时候Key就会成为Class。
2. ng-app从来不是必须的。
要设置ng-app,一般放在html节点上,比如说
Angular 1.X 的启动方式为调用 angular.bootstrap ,当设置了 ng-app 指令后(其实ng-app根本不是指令,是写死在AngularInit函数中直接用jQuery或JqLite找出写了ng-app的DOM元素)Angular会自动帮你在指定元素上调用 angular.bootstrap ,简单地说是一个(DSL的)自启动的语法糖。
ng-app的缺陷是一个页面只能启动一个Angular Application,不过对于一般网页足够。
3. 完全偏离官方建议和任何可维护的代码规范
a 所有的controller、directive、filter、service全部都要附加在模块module上面。
Controller附加在module上还说得过去,但directive和filter和service都应该独立封装,不管是为单元测试还是为重用性。
4. 完全不了解Angular作用域
b 每一个controller都是独立的作用域,它用于直接控制接管操作对应的html元素
对于每个directive,其scope可以指定三种可能的值:
false:继续使用当前作用域。
true:在当前作用域上创建新的子作用域。
{/*一个对象*/}:具有给定属性和绑定关系的独立作用域。
ng-controller中的scope值是true,也就是在其父作用域(父DOM所在的作用域)上创建了一个新的子作用域,并非独立作用域,子Controller对应的HTML模板中可以直接访问父Controller的$scope中的内容,所有Controller对应的模板都能访问$rootScope(ng-app所在的DOM,或bootstrap给定的DOM),何来独立。
ngController不算单独的括号6行代码,有空看一眼就好,应该不至于看不懂吧。
5. 数据交换需要Scope,但是不一定需要$scope
c $scope是html元素到controller之间的映射,你可以直接就看成controller要通过
$scope来操作 html元素。简单的controller自身变量传递完全可以通过Controller As来做,避免$scope污染(因为一点都不独立)。
Controller:
Template:
并不需要$scope变量。
6. 从来没有说Angular不应该操作DOM
angualr不要写jQuery
从来说的是不要在Controller中操作DOM,操作DOM的东东手动封装成Directive。
要是答主也就只写Controller我也无话可说啦。
-
扫码下载安卓APP
-
微信扫一扫关注我们
微信扫一扫打开小程序
手Q扫一扫打开小程序
-
返回顶部
发表评论