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对象模型-执行模型
Apr 28 Javascript
jQuery 获取对象 定位子对象
May 31 Javascript
深入理解JavaScript定时机制
Oct 29 Javascript
JS关键字球状旋转效果的实例代码
Nov 29 Javascript
浅析JQuery UI Dialog的样式设置问题
Dec 18 Javascript
跟我学习javascript的函数和函数表达式
Nov 16 Javascript
jquery实现数字输入框
Feb 22 Javascript
vue打包后显示空白正确处理方法
Nov 01 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
js常用正则表达式集锦
May 17 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
使用vue中的混入mixin优化表单验证插件问题
Jul 02 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
第十四节 命名空间 [14]
2006/10/09 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
php发送post请求函数分享
2014/03/06 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
js 创建书签小工具之理论
2011/02/25 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
js post提交调用方法
2014/02/12 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
python的几种开发工具介绍
2007/03/07 Python
Python中的localtime()方法使用详解
2015/05/22 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
如何设置Java的运行环境
2013/04/05 面试题
教师实习自我鉴定
2013/12/13 职场文书
三字经教学反思
2014/04/26 职场文书
纪检监察建议书
2014/05/19 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL
详解SQL报错盲注
2022/07/23 SQL Server