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 相关文章推荐
基于JQuery的cookie插件
Apr 07 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
Oct 24 Javascript
Javascript Object 对象学习笔记
Dec 17 Javascript
JavaScript中的异常捕捉介绍
Dec 31 Javascript
javascript实现Table排序的方法
May 15 Javascript
Spring mvc 接收json对象
Dec 10 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
Mar 11 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
Mar 23 jQuery
Angular2入门--架构总览
Mar 29 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
May 15 Javascript
Vue实现返回顶部按钮实例代码
Oct 21 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
德劲1103的维修打理经验
2021/03/02 无线电
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
Js切换功能的简单方法
2010/11/23 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
jQuery无刷新切换主题皮肤实例讲解
2015/10/21 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
django批量导入xml数据
2016/10/16 Python
json跨域调用python的方法详解
2017/01/11 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
Python 忽略warning的输出方法
2018/10/18 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
大一军训感言
2014/01/09 职场文书
生日主持词
2014/03/20 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS