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 相关文章推荐
映彩衣的js随笔(js图片切换效果)
Jul 31 Javascript
ejs v9 javascript模板系统
Mar 21 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
Nov 30 Javascript
jQuery on()绑定动态元素出现的问题小结
Feb 19 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
jQuery手风琴的简单制作
May 12 jQuery
javaScript中封装的各种写法示例(推荐)
Jul 03 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
Sep 10 Javascript
vue动态禁用控件绑定disable的例子
Oct 28 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函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
Python中DJANGO简单测试实例
2015/05/11 Python
关于Python的一些学习总结
2018/05/25 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
Python判断有效的数独算法示例
2019/02/23 Python
django 实现简单的插入视频
2020/04/07 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
阿巴庭院:Abba Patio
2019/06/18 全球购物
五四青年节演讲稿
2014/05/26 职场文书
小学德育工作总结2015
2015/05/12 职场文书
在人间读书笔记
2015/06/30 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Android实现图片九宫格
2022/06/28 Java/Android