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 相关文章推荐
use jscript with List Proxy Server Information
Jun 11 Javascript
TextArea不支持maxlength的解决办法(jquery)
Sep 13 Javascript
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
微信小程序 MINA文件结构
Oct 17 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
js 监控iframe URL的变化实例代码
Jul 12 Javascript
js删除数组中的元素delete和splice的区别详解
Feb 03 Javascript
JavaScript实现求最大公共子串的方法
Feb 03 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
Feb 19 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 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
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python文件和目录操作详解
2015/02/08 Python
详解Python的Django框架中的通用视图
2015/05/04 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
Python制作数据导入导出工具
2015/07/31 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
python requests证书问题解决
2019/09/05 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
css3中transition属性详解
2014/09/02 HTML / CSS
德国高性价比网上药店:medpex
2017/07/09 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS