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 相关文章推荐
图片翻转效果具体实现代码
Jan 09 Javascript
js 获取input点选按钮的值的方法
Apr 14 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
Javascript中For In语句用法实例
May 14 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
Mar 12 Javascript
基于vue1和vue2获取dom元素的方法
Mar 17 Javascript
微信小程序将字符串生成二维码图片的操作方法
Jul 17 Javascript
JavaScript从原型到原型链深入理解
Jun 03 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 jQuery
前端监听websocket消息并实时弹出(实例代码)
Nov 27 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
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
Python爬取网页信息的示例
2020/09/24 Python
python 装饰器重要在哪
2021/02/14 Python
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
简约控的天堂:The Undone
2016/12/21 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
最受欢迎的自我评价
2013/12/22 职场文书
12月红领巾广播稿
2014/02/13 职场文书
小学新学期寄语
2014/04/02 职场文书
员工年终考核评语
2014/12/31 职场文书
消费者投诉书范文
2015/07/02 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang