angular 动态组件类型详解(四种组件类型)


Posted in Javascript onFebruary 22, 2017

组件类型1:纯函数功能,而没有视图部分,即Factory(类似于$http)

promise.component.html

常见的有内置的$http,$q之类的。一般使用promise与作用域进行交互

组件类型2:不是常驻于视图,而是动态插入的、有UI的一类组件,有输入交互、不常被调用(类似于Model对话框)

factory.component.html

并发性。这里收到es6的启发。在factory内使用了构造函数,来区分不同的实例。当然,factory接口返回的类型要根据需求来定:仅仅是一个promise?还是返回一整个组件的实例

数据驱动。factory内部我使用了this.scope = $rootScope.$new()。并把每个实例的模板和作用域进行绑定$compile(html())(scope)。感谢毛总,这招真是方便。我们能够真正使用到angular的精髓:用数据来驱动我们的视图了

交互。该demo因为需要与用户进行交互,因此返回了一个promise给调用者。当然实际要看情况。

作用域。由于该组件并不常常需要被调用,因此一旦组件'close'(从视图上消失),就scope.$destroy()、instance.remove()

组件类型3:不常驻于视图,但会被经常调用,而且是动态插入的、无输入交互、有UI的一类组件(类似于popover)

factory.component2.html

对比。与上类型组件对比,该类组件更容易被调用(类似于微信右上角的popover)
并发性。要求更高,稍复杂。因此返回组件的实例,让开发者可用调用组件内部的方法(open/close/...)。同时,鉴于需求特殊性,在open()方法处我传入了$event作为UI参数

作用域。由于是隐藏地常驻与视图,因此只当路由切换时才注销实例。scope.$watch('$stateChangeSuccess', function(){scope.destroy()})

组件实例。赋值给作用域的变量 $scope.instance = Mypop.init()

组件类型4:实例之间存在某种关系、不常驻于视图,动态插入、只有视觉交互、有UI的一类组件(类似于ant design的Notification)

factory.component.3.html

对比。与上类组件对比,组件的每个实例之间需要存在某种队列关系,具体操作方法请参考上面的例子。

实例关系。如何维护实例之间的关系?笔者比较笨的方法是开启另一个factory实例,存放一个实例数据,来维护实例之间的关系var _sl = scope.list = []。然后该factory具备操作实例队列的一些方法 _sl.push(token)或者 _sl.shift()。同时每个实例都会监听这个实例队列 _s.$watchCollection('instanceList', function(){...})

Javascript 相关文章推荐
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 Javascript
js关于字符长度限制的问题示例探讨
Jan 24 Javascript
Javascript基础教程之break和continue语句
Jan 18 Javascript
JavaScript Date 知识浅析
Jan 29 Javascript
详解使用create-react-app快速构建React开发环境
May 16 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
Dec 06 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 Javascript
jquery实现上传图片功能
Jun 29 jQuery
ant design vue 表格table 默认勾选几项的操作
Oct 31 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
Feb 22 #Javascript
JavaScript实现256色转灰度图
Feb 22 #Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 #Javascript
微信小程序 扎金花简单实例
Feb 21 #Javascript
angular中的http拦截器Interceptors的实现
Feb 21 #Javascript
微信小程序 PHP生成带参数二维码
Feb 21 #Javascript
vue-resource 拦截器使用详解
Feb 21 #Javascript
You might like
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
详解webpack 如何集成第三方js库
2017/06/29 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
通过Python实现自动填写调查问卷
2017/09/06 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
蔻驰法国官网:COACH法国
2018/11/14 全球购物
什么是网络协议
2016/04/07 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
毕业评语大全
2014/05/04 职场文书
捐书活动总结
2014/05/04 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书