Angular 1.x个人使用的经验小结


Posted in Javascript onJuly 19, 2017

前言

angular1.x作为经典的mvc框架,可以创建能够复用的组件,也可进行双向数据绑定。国内的vue.js/avaloon.js都是同类型的框架,之前工作以Angular1.x为主,主要做业务系统,以后工作中技术栈可能以vue为主,在此对Angular1.x的使用做一个简单总结,这里使用1.5+版本。下面话不多说,来一起看看详细的介绍:

基本概念

 1、依赖注入

依赖注入,在angular中到处可见,这里不会照本宣科,只以很直白的方式的简单描述基本使用方式,以$scope注入为例。

创建一个controller,注入$scope,有三种写法:

1)隐式注入

function HomeController($scope){};

2)内联注入

app.controller('HomeController',['$scope',function($scope){ }])

3)显式注入

app.controller(‘HomeController',HomeController);

HomeController.$inject=[‘$scope'];

function HomeController($scope){

}

注意:由于第一种注入方式,是通过对函数做toString操作,然后使用正则匹配出参数名称,来实现注入,所以这种方式不能对代码进行压缩混淆处理。

 2、directive

指令系统,我认为是angular1.x版本中最强大也是最复杂的部分,angular作者本身做后端出身,所以在整个指令周期也符合语言处理过程:经过编译(compile函数,会返回link函数)、链接处理(link函数)。

1)指令最基本配置

app.directive(‘dire',function(){

return function(){

return {



template/templateUrl:'', //模版



scope:{} //为true或为对象表示隔离作用域



restrict 'ACEM'//使用方式



link:function(scope,ele,attrs,controllers){}



compile:function(ele,attr){return function(){}}//如果此函数存在,link函数会被忽略,因为compile函数会返回link函数



}


}

});

2)关于绑定策略

独立作用域父子作用域之间交换数据的方式,主要有三种(或说四种)

@绑定,指令属性的值可以使用表达式,但是得出来的值一定是字符串;

&绑定,表示引用绑定,主要绑定父作用域中函数,实现关注点的注入

=绑定,表示双向数据绑定

<绑定,表示单向绑定

注意:对于&绑定的使用,主要是为了实现子作用域到父作用域的传递,个人比较喜欢vue中父子交互的方式:props in,event out。所以这里我一般使用 scope.$emit(‘xxx',data),来实现子传父。

3、component

component是1.5+新增的方法,主要为了往angular2+的过度更自然一些,相当于指令restrict:'E'的简化,类似于vue中的component,不建议操作dom,一般只用于渲染,建议构建pure component。

4、controller

controller可以认为是一个封装程序逻辑的地方,这里和后端mvc中controller的作用类似,拿到modal,渲染模版,在angular中$scope是连接controller和view的桥梁,$scope是实现数据绑定的基础,详见文档,这里不再赘述。

controller创建方式,主要分为静态工厂方法注册和动态注册:

1)静态注册:

app.controller(‘HomeController',function(){})

2)动态注册:

$controllerProvider.register(“HomeController”,function(){})

注意:动态注册是实现按需加载的基础,在项目结构实战模块会基于requirejs 来演示怎么实现动态按需加载controller(当然也可以使用oclazyload模块实现按需加载)。

5、service

service一般是封装通用代码,所谓通用代码一般是跨controller/directive等使用的代码,所以经常用来封装ajax接口访问、工具接口等。

service创建方式有三种:

1)、provider最原始的创建方式,可以注入到config中,加上provider后缀,有固定格式,必须返回$get函数

2)、factory是对provider的封装,直接返回对象即可

3)、service是最简单的创建方式,通过传递构造函数来创建服务。

6、filter

过滤器主要实现对象的格式化

7、router

内置路由模块ngRoute,用的较少,主要因为无法实现复杂路由比如嵌套,多层等,当然也可以结合ng-include实现类似效果,推荐使用第三方路由模块ui-router,ui-router是基于state的一种路由框架,是使用最多的一种路由模式。

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
Javascript继承机制的设计思想分享
Aug 28 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
解析微信JS-SDK配置授权,实现分享接口
Dec 09 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
vue中子组件调用兄弟组件方法
Jul 06 Javascript
laydate如何根据开始时间或者结束时间限制范围
Nov 15 Javascript
Vue批量图片显示时遇到的路径被解析问题
Mar 28 Javascript
node.js文件操作系统实例详解
Nov 05 Javascript
javascript数组元素删除方法delete和splice解析
Dec 09 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 #Javascript
vue loadmore组件上拉加载更多功能示例代码
Jul 19 #Javascript
vue引入swiper插件的使用实例
Jul 19 #Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 #Javascript
JS实现的走迷宫小游戏完整实例
Jul 19 #Javascript
JS设置随机出现2个数字的实例代码
Jul 19 #Javascript
利用jQuery异步上传文件的插件用法详解
Jul 19 #jQuery
You might like
PHP扩展CURL的用法详解
2014/06/20 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
非常详细的C#面试题集
2016/07/13 面试题
决定成败的关键——创业计划书
2014/01/24 职场文书
大学专科求职信
2014/07/02 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS