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插件制作 提示框插件实现代码
Aug 17 Javascript
jQuery之排序组件的深入解析
Jun 19 Javascript
extJS中常用的4种Ajax异步提交方式
Mar 07 Javascript
封装好的一个万能检测表单的方法
Jan 21 Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
Aug 06 Javascript
Vue.js样式动态绑定实现小结
Jan 24 Javascript
Vue v-bind动态绑定class实例方法
Jan 15 Javascript
node+multer实现图片上传的示例代码
Feb 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 管理系统程序中的后门
2009/08/05 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
python实现的重启关机程序实例
2014/08/21 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
聊聊python中的异常嵌套
2020/09/01 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
什么是.net
2015/08/03 面试题
护理学中专毕业生求职信
2013/11/11 职场文书
实习心得体会
2014/01/02 职场文书
写给女生的道歉信
2014/01/14 职场文书
运动会邀请函范文
2014/01/31 职场文书
施工质量承诺书范文
2014/05/30 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python