出处:https://github.com/Penggggg/angular-component-practices
组件类型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(){...})

最新文章

  1. java 导出word 并下载
  2. mysql查询正在执行的进程
  3. DBCC SHOW_STATISTICS 查看统计信息
  4. Effective C++ -----条款03:尽可能使用const
  5. UVA 247 电话圈(Floyd传递闭包+输出连通分量)
  6. 工作圈redis 使用
  7. C#如何以管理员身份运行程序
  8. 《hanoi(汉诺塔)问题》求解
  9. Nearest Common Ancestors
  10. UVA 11464 Even Parity(递归枚举)
  11. Cocos2d学习之路五(Box2d使用CCPhysicsSprite时编译不通过解决方法)
  12. 【Django】django 的request和response(转)
  13. css中的定位属性
  14. Electron入门笔记(二)-快速建立hello world
  15. Mad Lids游戏 华氏与摄氏温度转换
  16. SAP Study Notes: BW Queriy-Variables(变量)
  17. sql server 存储过程使用游标记录
  18. 【有新题】OCP 12c 062出现大量新考题-14
  19. CRT软件光标不闪烁
  20. WGAN (原理解析)

热门文章

  1. C++经典面试题汇总
  2. Mac退出vim
  3. 宜人贷项目里-----正则匹配input输入月份规则
  4. inline元素、inline-block元素在float、position:fixed、position:absolute之后出现的问题
  5. wDatepicker97的用法(点击事件联动)
  6. MySql的内置函数
  7. Visual Studio2017中如何让ADO.NET实体数据模型[EntityFramework]支持MariaDB&MySQL数据源
  8. 浅谈Java中的hashcode方法(转载)
  9. WES7 定制界面完整过程(去除所有windows标识)
  10. Tomcat配置连接池的java实现