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 submit()无法提交问题
Apr 21 Javascript
使用typeof方法判断undefined类型
Sep 09 Javascript
jQuery中Ajax的load方法详解
Jan 14 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
Aug 03 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
Aug 16 Javascript
使用jsonp实现跨域获取数据实例讲解
Dec 25 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 Javascript
JS的Ajax与后端交互数据的实例
Aug 08 Javascript
Vue封装的可编辑表格插件方法
Aug 28 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
从零使用TypeScript开发项目打包发布到npm
Feb 14 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
JS 显示当前日期与时间的代码
2010/03/24 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
Vue 中的compile操作方法
2018/02/26 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Django中的Model操作表的实现
2018/07/24 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
医院后勤自我鉴定
2013/10/13 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
公司财务自我评价分享
2013/12/17 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
大学毕业感言一句话
2014/02/06 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
2015年中个人总结范文
2015/03/10 职场文书
小学运动会加油稿
2015/07/22 职场文书
详解nodejs内置模块
2021/05/06 NodeJs