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 相关文章推荐
AJAX分页的代码(后台asp.net)
Feb 14 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
Jul 11 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
Sep 16 Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 Javascript
jQuery提交多个表单的小技巧
Jul 27 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
Nov 29 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
May 18 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 Javascript
Vue实现搜索结果高亮显示关键字
May 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
我的动漫时代的创业计划书范文
2014/01/27 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
会计工作能力自我评价
2015/03/05 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
spring boot实现文件上传
2022/08/14 Java/Android