###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.代码合并与混淆工具:grunt

grunt-contrib-uglify(混淆)、grunt-contrib-concat(合并)、grunt-contrib-watch(监听文件变化)、grunt-contrib-qunit(单元测试)、grunt-contrib-jshint(语法检查)

5.依赖管理工具:bower

5.1.自动安装依赖组件
5.2.组件之间依赖检查
5.3.版本兼容自动检查

6.单元测试工具:karma,测试用例:jasmine

######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 start

ps:配置文件是karma.conf.js

7.集成测试工具:
protractor,基于WebDriverJS,启动

npm run protractor

8.项目目录:
-app
–bower-components
–css
–img
–js
–partials
-node-modules
-scripts
-test
–e2e(end2end)(集成测试用例)
–unit(单元测试用例)

ps:小型服务模块(http-server)(可以使任何一个文件夹编程可访问服务),地址
安装:

npm install http-server

启动:

http-server

sublime删除一行: 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