首页 > 代码库 > Angularjs[1]
Angularjs[1]
001-:
客户端模版:Angular中,模版和数据均会被发送到浏览器中,然后在客户端进行装配。
数据绑定(MVVM):数据绑定可以自动将 model 和 view 之间数据同步。
依赖注入:
002-数据绑定:
搭建Angularjs开发环境 www.angularjs.org
<body ng-app> <input type="text" ng-model="name" value=""> <!--{{angular的表达式}}--> {{name}} <input type="text" ng-model="name" value=""> <script type="text/javascript" src="../../vendor/angular/angularjs.js"></script> </body>
1.ng-app指令:告知 Angular 应当管理界面哪一块;
2.Angular 表达式与 js 表达式区别:
- 属性求值:所有属性的求值是对于 scope 的,而 js 是对于 window 对象的;
- 宽容:表达式求值,对于 undefined 和 null,Angular 是宽容的,但 js 会产生 NullPointerExceptions;
- 没有流程控制语句:在 Angular 表达式里,不能做以下任何:条件分支,循环,抛出异常;
- 过滤器(filters):可将表达式结果传入过滤器链(filter chains)。
003-控制器:
<body> <div ng-app> <div ng-controller="firstController"> <input type="text" value="" ng-model="name"> <input type="text" value="" ng-model="age"> {{name}} {{age}} </div> </div> <script type="text/javascript" src="app/index.js"></script> <script type="text/javascript" src="../../vendor/angular/angularjs.js"></script> </body>
var firstController = function ($scope) { //$scope 作用域 //申明一个 model $scope.name = ‘Alrale‘; $scope.age = ‘20‘; }
1.$scope:是指向 model 的 object,也是表达式的执行上下文;scope被放置于一个类似应用的DOM结构的层次结构中。
004-ngBind:
<body> <div ng-app> <div ng-controller="firstController"> <input type="text" value="" ng-model="name"> <input type="text" value="" ng-model="age"> <div ng-bind="name"></div> <div ng-bind="age"></div> </div> </div> <script> alert(‘!‘); </script> <script type="text/javascript" src="app/index.js"></script> <script type="text/javascript" src="../../vendor/angular/angularjs.js"></script> </body>
var firstController = function ($scope) { $scope.name = ‘Alrale‘; $scope.age = ‘20‘; }
005-多个控制器
<body> <div ng-app> <div ng-controller="firstController"> <input type="text" value="" ng-model="name"> <div ng-controller="secondController"> <input type="text" value="" ng-model="name"> </div> </div> </div> <script type="text/javascript" src="app/index.js"></script> <script type="text/javascript" src="../../vendor/angular/angularjs.js"></script> </body>
var firstController = function ($scope) { $scope.name = ‘Alrale‘; $scope.age = ‘20‘; } var secondController = function ($scope) { }
006-$scrope 中 $apply 方法:
<body> <div ng-app> <div ng-controller="firstController"> {{date}} </div> </div> <script type="text/javascript" src="app/index.js"></script> <script type="text/javascript" src="../../vendor/angular/angularjs.js"></script> </body>
var firstController = function ($scope) { $scope.date = new Date(); // setInterval(function () { // //这里虽然变化,但是没有触发 脏检查 // $scope.date = new Date(); // },1000) setInterval(function () { $scope.$apply(function () { $scope.date = new Date(); }) },1000) }
1.脏检查:将原对象复制一份快照,在某个时间,比较现在对象与快照的值,如果不一样就表明发生变化。
2.Angular 通过脏检查得知变量是否发上变化。
Angular 策略:
- 不会脏检查所有的对象,当对象被绑定到html中,这个对象添加微检查对象(wetcher)。
- 不会脏检查所有的属性,同样当属性被绑定后,这个属性会被列为检查的属性。
Angular程序初始化时,会将绑定的对象的属性添加为监听对象(watcher),也就是说一个对象绑定了N个属性,就会添加N个 watcher。
3.手动触发脏检查:$apply 进入 angular context,然后通过$digest去触发脏检查,推荐给 $apply 参数,否则会检查该 $scope 里所有监听的属性。
4.不建议直接调用 $digest() 属性,而应使用 $apply()。
Angularjs[1]