这是一段HTML内容,使用ng-model
来对输入框进行数据绑定,绑定值为inputData
。然后使用ng-bind
的方式将值显示在页面中。而实现这个功能的JS代码很少很少。只需要声明一下应用模块就行了,注意模块名app
与html标签的ng-app
对应。
1 | var app = angular.module('app', []); |
如此简单的就完成了动态输入显示的功能,这在以前的普通jQuery代码中是不可想象的。而在真实的项目中,双向数据绑定能极大的减少我们的代码量,开发效率大大提高。
Angular的双向数据绑定功能是它的优点,同时也有它的弊端。Angular建议一个页面最多2000个双向绑定,但在实际项目中一个页面通常很容易超标。而Angular的数据监听越多性能就越差,解决方案是使用 bindonce,参考链接:https://github.com/Pasvaz/bindonce。来进行单向数据绑定,对于那些只需要单向绑定的就使用它,以此来提高性能。
my-progress
,进度条。样式使用的是Bootstrap。HTML结构:
1 | <my-progress percent="60">my-progress> |
JavaScript代码:
1 | angular.module('app', []) |
效果预览:
在HTML代码中的my-progress
就是自定义的指令。这个的指令directive
代码中定义了restrict
参数为EA
,它代表的意思是可以使用标签的形式和属性的形式来书写指令。
我们可以看到,使用指令的方式HTML代码看上去更加简洁了,而且可扩展性也好。非前端人员一看代码也能大致看出功能和意思。这样极大的提高了多人协作,减少了沟通成本,开发效率自然就高了。在以后的文章中我可能会详细讲解Angular指令的内容。
angular.module
是定义Angular模块的方法,组成模块的整体包括:controller
、directive
、filter
、service
、factory
等。这在大型项目中是很好的架构方式,以此解决项目中代码过多,模块依赖等问题。定义模块:
1 | var app = angular.module('app', []); |
其中angular.module
方法第一个参数是个模块名称,第二个参数是一个依赖数组,就是当前模块依赖哪些其它模块。一般可以将一个模块分成多个文件,例如:directive.js、service.js、filter.js等,之后可以通过代码压缩合并的方式组合在一起。如果代码文件过大,还可以考虑模块化加载的方式,在github上已经有了很多的模块化加载解决方案。
value
值1 | var app = angular.module('app', []); |
使用value
可以定义一个值,对象,数组。然后使用的时候可以在controller
,directive
、factory
等中使用。需要注意的是,在使用的时候如果更改其值,那么所有的使用都会影响。它是可以被修改的。而且还有一点就是value不可在config里注入。
constant
常量constant
和value
类似,不过它不能被修改,可以在config里注入。1 | var app = angular.module('app', []); |
factory
工厂1 | var app = angular.module('app', []); |
provider
提供者provider
提供者所使用的AngularJS内部创建过程中配置阶段的service
服务,factory
工厂等。提供者是一个特殊的工厂方法以及get
方法,用来返回值/服务/工厂。1 | var app = angular.module('app', []); |
service
服务1 | var app = angular.module('app', []); |
ui-router
来构建前端路由。下表列出了ngRoute与ui-router的区别:ngRoute | ui-router |
---|---|
应用程序中的url | 应用程序内的一个区域 |
只是平面层次结构 | 可以嵌套的层次结构 |
名称只能是url | 名称可以自定义 |
只能通过url导航 | 通过名称或 url 导航 |
只能单一视图ng-view | 可以存在多个视图ui-view |
只能填充一个视图 | 可以填充任何视图 |
通过指令将填充某一部件 | 通过状态填充某一部件 |
参考文档:https://github.com/angular-ui/ui-router