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 相关文章推荐
javascript 星级评分效果(手写)
Dec 24 Javascript
JavaScript的事件绑定(方便不支持js的时候)
Oct 01 Javascript
可选择和输入的下拉列表框示例
Nov 05 Javascript
浅析JavaScript中两种类型的全局对象/函数
Dec 05 Javascript
JS中使用sort结合localeCompare实现中文排序实例
Jul 23 Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
Sep 15 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
JS代码触发事件代码实例
Jan 02 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
Linux下进行MYSQL编程时插入中文乱码的解决方案
2007/03/15 PHP
ThinkPHP之getField详解
2014/06/20 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
Python实现查看系统启动项功能示例
2018/05/10 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python中正则表达式的用法总结
2019/02/22 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
python学习笔记之多进程
2020/08/06 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
汽车检测与维修专业求职信
2014/07/04 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
摩登时代观后感
2015/06/03 职场文书
暂住证证明
2015/06/19 职场文书
Ruby处理YAML和json数据
2022/04/18 Ruby