1.需要什么前端开发环境

1)代码编辑工具 webstorm

2)断点调试工具 chrome插件Batarang

3)版本管理 tortoiseGit

4)代码合并和混淆工具

  •   grunt-contrib-uglify  
  •   grunt-contrib-jshint  
  •   grunt-contrib-qunit  
  •   grunt-contrib-watch  
  •   grunt-contrib-concat

5)依赖管理工具 bower
bower 自动安装依赖的组件
组件之间的依赖检测
版本兼容性自动检测
http-server
简单的http-server
基于node

6)单元测试工具Jasmine
类似Java里面的JUnit 提供语法编写测试用例

  • 分组 describe(string,function) 表示分组,一组测试用例
  • 用例 it(string,function) 表示测试用例
  • 期望 expect(expression) 表示期望expression这个表达式具有某个值或者某种行为
  • to***(arg) 这个函数表示匹配

protractor(专为angularjs而生的)

karma-coverage

7)集成测试工具

2.完整的目录结构

3.MVC框架

0)AngularJS框架强制正确实现MVC;模板声明的功能,使HTML意图更直观;AngularJS模型部分是基本的JavaScript对象,容易操作;AngularJS使用声明的方式,通过将HTML的声明与背后的JavaScript功能直接联系来扩展HTML;AngularJS提供了过滤器,使得数据从模型传递到视图时可轻松格式化数据;AngularJS倾向于使用传统JavaScript应用程序所使用的代码的一小部分,只需关注逻辑,不必关注细节,比如数据绑定;AngularJS比传统方法所需的DOM操作少很多,指导你把操作放在程序中正确的位置,基于表示数据比基于DOM操作更易设计;AngularJS提供了内置服务,可用结构化和可重用的方式实现自己的服务;AngualrJS框架清晰地把职责分离

1)为什么需要MVC (模块化和复用)

  • 代码规模越来越大,切分职责是大势所趋
  • 为了复用:很多逻辑是一模一样的
  • 为了后期维护方便:修改一块功能不影响其他功能

2)前端MVC的困难

  • 操作DOM代码必须等待整个页面全部加载完成
  • 多个js文件之间如果出现互相依赖,程序必须自己解决
  • js的原型继承给前端编程带来很多困难

1.1.模块

AngularJS引入了代表应用程序组件的模块的概念。模块提供命名空间,以基于模型的名称来引用指令,范围和其他组件。使得包装和再利用应用程序的部件更容易。

AngularJS中,每个视图或网页都通过ng-app指令分配给他一个单独的模块。可以把其他模块作为依赖模块添加到主模块(更结构化和组件化)

1.2.作用域和数据模型

AngularJS引入作用域(scope)概念。(实际上只是用来填充呈现在网页上的视图的数据的JS表示),数据可以来自任何源,如数据库,远程网络服务,AngularJS代码,web服务器动态生成etc.

作用域:普通的JavaScript对象。(可以根据需要在AngularJS代码中操作他们)。另外还能嵌套作用域来组织数据以匹配他们正在使用的上下文。

1.3.具有模板和指令的视图

HTML是基于DOM的。大多数动态Web应用程序直接用js或者jQuery操作DOM。

AngularJS引入结合模板和指令建立呈现给用户HTML的视图的概念。

指令:1)要被添加到一个HTML模板的额外属性,元素和CSS类。2)扩展了DOM的一般行为的js代码

使用指令的优点:HTML模板模板通过指令指出了预期的逻辑。内置的AngularJS指令处理大多数必要的DOM操作功能,(可把作用域中的数据绑定到视图)

可以自定义指令做WEB应用的任何DOM操作

1.4.表达式

AngularJS:在HTML模板中添加表达式的能力。对表达式求值,然后动态添加到网页。表达式被链接到作用域。

1.5.控制器

MVC框架:通过实现控制器完成。(通过指令把控制器添加到HTML中,后台实现为js代码)

1.6.数据绑定

AngularJS内置数据绑定:把模型中的数据与网页提示的内容链接。

当网页上的数据改变时模型被更新,且当数据在模型中被改变时网页也自动更新(模型始终向用户呈现数据的唯一来源,视图只是模型的投影)

1.7.服务

AngularJS在环境中工作的主力:服务。为Web应用程序提供功能的单例对象

(web应用程序的一个共同任务是执行对web服务器的ajax请求,angularjs提供了http服务,包含用来访问web服务器的所有功能)

服务功能在上下文中完全独立,可以很容易被组件化。(如内置的服务组件:http请求,日志记录分析,动画)

1.8.依赖注入

依赖注入:一个过程。一个代码组件定义了对其他组件的依赖关系。当代码被初始化,依赖组件可提供内部访问。

常见方法:使用服务。(如果正在定义需要通过HTTP请求访问Web服务器的模块,可以把http服务注入该模块,模块中的代码就能使用http功能)

1.9.职责分明

重要原则:职责分离。结构化框架确保代码很好的实现,容易理解维护测试。

视图作为应用程序正式表示结构。表明任何表示逻辑都作为视图中的HTML模板指令。

如果需要DOM操作。就在一个内置指令或自己的自定义指令js代码中执行

把任何可重复使用的任务都实现为服务,并通过依赖注入把他们添加到自己的模块

确保作用域反映了模型当前状态,并且是由该视图使用数据的单一来源

确保控制器代码只起到充实作用域数据的作用,而不包括任何业务逻辑

在模块的命名空间中定义控制器,不是全局定义。

2.AngularJS生命周期

AngularJS:组件,(引导,编译,运行阶段)

2.1.引导阶段

生命周期的第一阶段:初始化自身的必要组件,初始化ng-app指令指向模块。模块被加载,任何依赖关系都被注入模块,并提供给模块中的代码使用。

2.2.编译阶段

生命周期的第二阶段:HTML编译。加载时,DOM以静态形式被加载到浏览器中。编译阶段,静态DOM被替换成表示AngularJS视图的动态DOM。

包括:1)遍历静态DOM并收集所有指令,然后把指令链接到AngularJS内置库或自定义指令代码中相应的js功能上。指令与作用域结合,产生动态或实时视图

2.3.运行时数据绑定阶段

最后阶段:运行时阶段。存在直到用户重新加载或离开网页。作用域的任何更改都反映在视图中,视图中的任何更改也直接更新到作用域。(作用域成为视图唯一来源)

AngularJS vs 传统数据绑定:传统方法把模板与从引擎接受到的数据相结合,每次数据发生变化时对DOM执行操作。AngularJS只编译DOM一次,然后根据需要链接已经编译的模板。

2.4.将AngularJS与现有的JavaScript和jQuery整合

1.编写使用模式,自定义HTML指令,服务和控制器的AngularJS应用程序。

2.确保代码模型部分。把模型中增加模型数据的代码分离出来,放入控制器函数。把访问后端模型数据的代码分离放入服务

3.确定操作视图中的DOM元素代码。把DOM操作代码分离放入定义良好的自定义指令组件,提供HTML指令。

4.确定其他基于任务的函数,分离放入服务。

5.把指令和控制器隔离到模块中组织代码

6.使用依赖注入把服务和模块恰当连接。

7.更新HTML模板以使用新指令

2.5.在HTML文档中引导AngularJS

引导:1)通过ng-app指令定义应用程序模块,2)加载在<script>标签中的anjular.js

ng-app指令告诉AngularJS编译器把该元素作为编译的根。ng-app通常装入<html>标签,确保整个网页都会被包括。

1.AngularJS初探的更多相关文章

  1. 沉淀,再出发:AngularJS初探

    沉淀,再出发:AngularJS初探 一.前言 知识的学习需要形成一个闭环,在这个闭环之内可以自圆其说,从而触类旁通,加以理想创造,从而产生灵感.关于前端的知识,我已经写得差不多了,但是还有一个知识点 ...

  2. AngularJS 初探

    AngularJS,诞生于2009年,由Misko Hevery等人创建,后为Google所收购.这是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为 ...

  3. AngularJS初探:搭建PhoneCat项目的开发与测试环境

    AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 对于PhoneCat项目的 ...

  4. 3.1 AngularJS必备知识

    AngularJS是一个WEB应用框架. 本节我们会学习控制器(控制数据),会学习作用域(连接控制器和用户界面),用户界面又叫做视图,通过模板和作用域来创建交互视觉效果.另外,我们还会学习其他的特性比 ...

  5. 搭建PhoneCat项目的开发与测试环境

    AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 获取源代码 PhoneCa ...

  6. 初探AngularJS

    一.前言 早已听说AngularJS的大名,并在很久前也编写过些小demo,但是都没有系统学习过.由于,在下个版本项目中用到了AngularJS,so,那就一起再来研究研究呗. 说到,这个Angula ...

  7. AngularJS基础入门初探

    一.AngularJS简介 1.1 什么是AngularJS (1)一款非常优秀的前端JS框架,可以方便实现MVC/MVVM模式 (2)由Misko Hevery 等人创建,2009年被Google所 ...

  8. 初探AngularJs框架(三)

    一.实现todoList的demo 功能很简单,提供一个文本框,用户输入回车后添加新条目.每个条目可以在待处理和处理中两个区域间切换,每个条目都可以被删除,大致的界面如下图所示: 二.处理逻辑 首先将 ...

  9. 初探AngularJs框架(二)

    一.创建Components组件 直接使用AngularCLI即可很方便的创建component组件,使用如下指令: ng g component components/news 这样就会在compo ...

随机推荐

  1. ArcGIS Server开发教程系列(8)ArcGIS API for Javascript-控件(小部件)(续)纯代码

    完整代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/ht ...

  2. 知乎布局||offsetTop||侧边栏自动等高

    1.对a标签的详细介绍 直接在a标签使用onclick,怎么去除a的默认链接,onclick="return test()" 注意这里的return 不可舍去,test函数可以直接 ...

  3. swiper超出部分出现滚动条

    html代码 <div class="wrap swiper-container"> <div class="swiper-wrapper"& ...

  4. live555库中的openRTSP实例

    一.openRTSP编译运行 a)windows下编译运行 还是以mediaServer作为服务端,openRTSP作为客户端 b)Linux下编译运行 转自http://kuafu80.blog.1 ...

  5. js基本数据类型和typeof

    JavaScript数据类型是非常简洁的,它只定义了6中基本数据类型 null:空.无.表示不存在,当为对象的属性赋值为null,表示删除该属性 undefined:未定义.当声明变量却没有赋值时会显 ...

  6. map reduce

    作者:Coldwings链接:https://www.zhihu.com/question/29936822/answer/48586327来源:知乎著作权归作者所有,转载请联系作者获得授权. 简单的 ...

  7. 是时候放弃Uploadify了

    1.Uploadify是什么? Uploadify是来自国外的一款优秀jQuery插件,主要功能是批量上传文件. 这话是复制百度百科的,是:基于jQuery开发的文件上传插件. 2.为什么大家都在用? ...

  8. windows下vmware10.0 安装centos7

    centos7.0-1506, 1511, 是指2015年, 06月份, 11月份. 这是rhel ubuntu发布新版本的时间. centos7.0 只提供了64位的系统下载: x86_64: we ...

  9. localdomain的linux域

    both和and的区别? both强调(两者)都,用于肯定语气, and字面意思是"和,而且",是用于表示并列关系的句子,通常位于最后两个人或物之间,将将人物串联起来 如: thi ...

  10. 整理的mysql优化内容

    1,当只要一行数据时使用 LIMIT 1如果明确只取一条数据,要加上limit 1; 2,避免 SELECT *,根据需要获取字段应该养成一个需要什么就取什么的好的习惯. 3,使用 ENUM 而不是 ...