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 相关文章推荐
解析dom中的children对象数组元素firstChild,lastChild的使用
Jul 10 Javascript
js字符串转成JSON
Nov 07 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
May 23 Javascript
使用jquery+CSS实现控制打印样式
Dec 31 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
Sep 28 Javascript
JS实现六位字符密码输入器功能
Aug 19 Javascript
Angular2  NgModule 模块详解
Oct 19 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
Feb 22 Javascript
Vue使用vue-cli创建项目
Sep 01 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
Sep 02 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
Oct 29 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
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
php中的异常和错误浅析
2017/05/03 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
web 页面分页打印的实现
2009/06/22 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
Vue表单及表单绑定方法
2018/09/04 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python中单、双下划线的区别总结
2017/12/01 Python
python获取url的返回信息方法
2018/12/17 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Python字典实现伪切片功能
2020/10/28 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
农村优秀教师事迹材料
2014/08/27 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
我的中国心演讲稿
2014/09/04 职场文书
小学中等生评语
2014/12/29 职场文书
青岛导游词
2015/02/12 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
Python中super().__init__()测试以及理解
2021/12/06 Python