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 相关文章推荐
js模拟实现Array的sort方法
Dec 11 Javascript
js 单引号 传递方法
Jun 22 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
May 11 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
Aug 31 Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 Javascript
AngularJS 最常用的功能汇总
Feb 17 Javascript
AngularJS 单元测试(一)详解
Sep 21 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
利用JS判断元素是否为数组的方法示例
Jan 08 Javascript
TS 类型收窄教程示例详解
Sep 23 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
基于Zend的Config机制的应用分析
2013/05/02 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
谈谈vue中mixin的一点理解
2017/12/12 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
Python自定义线程池实现方法分析
2018/02/07 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
C语言面试题
2013/05/19 面试题
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
工程测量与监理专业应届生求职信
2013/11/27 职场文书
毕业生自荐书模版
2014/01/04 职场文书
英文自荐信常用句子
2014/03/26 职场文书
小学生通知书评语
2014/12/31 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Spring实现内置监听器
2021/07/09 Java/Android
pt-archiver 主键自增
2022/04/26 MySQL
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript