Angular学习笔记
###1.AngularJS的核心特性:
1.MVC
2.模块化
3.指令系统3.1.命令列表
ng-app=>根节点;
ng-controller=>控制器;
ng-repeat=>循环
ng-click=>事件绑定
ng-view=>根视图ng-bind=>取值表达式(代替(这种写法不推荐,因为频繁刷新的时候在页面上会显示这样的值))
ng-show/ng-hide=>展示、隐藏指令
ng-class=>绑定class
ngAnimate=>复杂应用4.双向数据绑定</br>
###2.学习AngularJS需要思考的问题:
1.为什么23中设计模式没有mvc
2.为什么其他的所有的前端框架都不实现数据双向绑定
2.1.如果让你实现数据双向绑定,你该怎么实现
2.2.数据双向绑定机制有什么潜在的缺点么?
3.1.为什么需要mvc?1.代码规模变大,责任切分;2.代码复用;3.方便后期维护(目的:模块化、复用)
3.2.前端mvc的困难?
1.操作dom的代码需要等待整个页面加载完成 2.多个js文件之间依赖 3.原型继承
3.3.mvc之间的关系?
1.一个controller对应一个model
2.一个controller对应一个view
3.controller中公用的部分抽离到service中3.4.controller使用需要注意的点?
1.不要试图复用controller,一个controller只负责一小块视图
2.不要在controller中操作dom,这个不是控制器的职责
3.不要在controller中做数据格式化,ng有好用的表单控件
4.不要在controller中做数据过滤操作,ng有$filter服务
5.controller不会相互调用,控制器之间的交互通过事件进行3.5.controller可以做的事情?
1.
3.6.$scope的特点?
1.$scope是一个POJO(Plain Old Javascript Object) 2.$scope提供了一些工具方法$watch/$apply(实时监测对象属性变化、一般不会手动调用)
3.是表达式的执行作用域
4.是一个树形结构(上层作用域是$rootScope),与DOM标签平行 5.会继承父$scope上的属性和方法 6.一个Angular应用只有一个跟$scope对象,一般位于ng-app上 7.$scope可以传播事件,类似DOM事件,可以向上也可以向下 8.$scope不仅是MVC的基础,也是后面实现双向绑定的基础 ###ps备注:1.$scope有事件机制:向上传播$emit(‘myEvent’),向下传播$broadcast(‘myEvent’)
2.事件初始化:$scope.num = 0; $scope.$on('myEvent', function(){ $scope.num++; });3.调试,获取当前dom上的$scope:
angular.element($0).scope();4.$scope不用的话,可以手动销毁,一般由angular自动销毁 5.$scope内置$watch方法,用来监控数据模型model的变化
3.7.$scope生命周期:
Creation->Watcher registration->Model mutation->Mutation observation->Scope destruction
###3.启动服务:
npm start
###4.自动化:
npm run protractor
###5.工具篇:
1.代码编辑工具:sublime/webstorm
2.断点调试工具:chrome、Angular Batarang
3.版本管理工具:git
4.代码合并与混淆工具:gruntgrunt-contrib-uglify(混淆)、grunt-contrib-concat(合并)、grunt-contrib-watch(监听文件变化)、grunt-contrib-qunit(单元测试)、grunt-contrib-jshint(语法检查)
5.依赖管理工具:bower
5.1.自动安装依赖组件
5.2.组件之间依赖检查
5.3.版本兼容自动检查
######6.1.jasmine核心理念:
分组:describe(string, function),一组测试用例、
用例:it(string, function),表示测试用例、
期望:expect(expression),具有某个值或行为、
匹配:to***(arg),某个表达式具有某个行为
######6.2.插件:
karma, karma-chrome-launcher:谷歌调试,
karma-coverage:覆盖率检查,
karma-jasmine:测试用例 ######6.3.启动:karma startps:配置文件是karma.conf.js
7.集成测试工具:
protractor,基于WebDriverJS,启动npm run protractor8.项目目录:
-app
–bower-components
–css
–img
–js
–partials
-node-modules
-scripts
-test
–e2e(end2end)(集成测试用例)
–unit(单元测试用例)
ps:小型服务模块(http-server)(可以使任何一个文件夹编程可访问服务),地址
安装:npm install http-server启动:
http-serversublime删除一行: ctrl+shift+k
###6.项目实战篇:
####6.1.项目目录
-app
–css
–framework
–imgs
–js
–tpls
–index.html
-node_modules
package.json
####6.2.app注册控制器:
$routerProvider.when('/hello', { templateUrl: 'tpls/hello.html', controller: 'HelloCtrl' }).otherwise({ redirectTo: '/hello' });
锚点跳转#/hello
####6.4.模块之间的依赖: 依赖注入
####7.1.UI框架: ui-router