欢迎大家指导与讨论 : )

  一 、前言

    由于笔者水平有限,在这里只是分享自己开发组件的一些思路~ 摘要:无UI组件类、有UI组件类、有UI组件类型2。欢迎拍砖吐槽 O(∩_∩)O

  二 、无UI组件类

    顾名思义,这类组件没有任何表现形式出现在用户界面上,只是一般功能的实现者,也就是平时所用到、所需要开发的 Factory。它一般由 controller 进行调用,用于处理并返回数据。重点是,Fatory 某些方法最好使用 $q(promise),来分隔业务逻辑。

         Controller
↓ ↑
data ↓ ↑ promise
↓ ↑
Factory
app.factory('hi', ['$q', '$timeout', function($q, $timeout){
function show(data) {
var deferred = $q.defer();
$timeout(function(){
// ... 处理数据data
defer.resolve(result)
}, 16)
return deferred.promise;
}
return {
show: function(data) {
return show(data)
}
}
}])
app.controller('Ctrl', ['hi', function(){
$scope.test = function() {
hi.show(data)
.then(function(result){
// ...
})
}
}])

  三 、有UI组件类

    该类组件的UI主要由 Factory 生成界面并插入到body中,类似于 Ionic的ActionSheet上拉菜单或者是弹窗。该类组件的需要注意的问题主要有:如何利用Angular的特性显示动态的数据、模板,如何更好地增强组件的复用性。因此,笔者的主要思路是:1 . 模板是稳定的而且单例的(生成的模板保存在 Factory属性中)。2 . 我们只需要用数据改变模板的内容( $compile,$rootScope.$new() )。3 . 复用性主要体现在每次调用 Factory 它的初始状态必须是唯一的( scope.$destroy/$rootScope.$new()或者其他一些reset操作 )。当然,使用 $q( promise )来执行回调依然是很好的选择。

          Controller
  ↓ ↑
  option ↓ ↑ promise
  ↓ ↑
Factory // 在Factory变量保存单例模板:
var a = angular.element(_html())
// 每当生成模板函数时
return a ? a : angular.element( _html())
// 每次调用启动函数
function show(option){
var scope = $rootScope.$new(); // 新增作用域用于管理视图中的数据
scope.title = option.title; // 配置内容
scope.showornot = option.show // 配置动态显示
$compile(_html())(scope) // 绑定模板和作用域
}
// 每次关闭时
function close(data){
deferred.resolve(data);
scope.$destory(); // 销毁作用域
}
// 模板函数
function _html( ){
return [
"<div>",
"<h3>{{ title }}</h3>", // 根据配置参数,动态显示不同内容
"<div ng-if='showornot'></div>" // 根据配置,动态显示
"</div>"
].join('')
}

  四 、有UI组件类2

    该类组件与上述的主要区别是UI模板是由指令的template参数所负责,功能实现者是自己开发的 Factory 工具,而 Controller 则是作用域的提供者,用于根据数据进行下一步的业务编写。于是此组件便拆分成3大部分。

                  directive
  ↓ ↑ ↓↑
调用 ↓ ↑ promise ↓↑
  ↓ ↑ (data) ↓↑ 指令scope的绑定策略
Factory ↓↑
↓↑
Controller -> 下一步处理

AngularJS之开发组件的一些思路的更多相关文章

  1. AngularJS进阶(三十一)AngularJS项目开发技巧之获取模态对话框中的组件ID

    AngularJS项目开发技巧之获取模态对话框中的组件ID 需求 出于项目开发需求,需要实现的业务逻辑是:药店端点击查看"已发货""已收货"订单详情时,模块弹出 ...

  2. AngularJS进阶(三十六)AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记)

    AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记) 前言 在"AngularJS项目开发技巧之图片预加载" ...

  3. AngularJS进阶(三十)AngularJS项目开发技巧之图片预加载

    AngularJS项目开发技巧之图片预加载 绪 项目(移动端采用Ionic 框架)开发完毕,测试阶段发现移动APP首页的广告图片(图片由服务器端返回相应url地址)很难加载,主要原因还是网速.如下图左 ...

  4. Vue + Element-ui实现后台管理系统(4)---封装一个ECharts组件的一点思路

    封装一个ECharts组件的一点思路 有关后台管理系统之前写过三遍博客,看这篇之前最好先看下这三篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system ...

  5. AngularJs的UI组件ui-Bootstrap分享(一)

    最近几个月学习了AngularJs和扩展的UI组件,并在公司小组内做了一次分享交流,感觉很有收获,在此记录下个人的学习心得. 目录: AngularJs的UI组件ui-Bootstrap分享(一) A ...

  6. AngularJs的UI组件ui-Bootstrap分享(十四)——Carousel

    Carousel指令是用于图片轮播的控件,引入ngTouch模块后可以在移动端使用滑动的方式使用轮播控件. <!DOCTYPE html> <html ng-app="ui ...

  7. AngularJs的UI组件ui-Bootstrap分享(十三)——Progressbar

    进度条控件有两种指令,第一种是uib-progressbar指令,表示单一颜色和进度的一个进度条.第二种是uib-bar和uib-progress指令,表示多种颜色和多个进度组合而成的一个进度条. 这 ...

  8. AngularJs的UI组件ui-Bootstrap分享(十二)——Rating

    Rating是一个用于打分或排名的控件.看一个最简单的例子: <!DOCTYPE html> <html ng-app="ui.bootstrap.demo" x ...

  9. AngularJs的UI组件ui-Bootstrap分享(十一)——Typeahead

    Typeahead指令是一个用于智能提示或自动完成的控件,就像Jquery的AutoComplete控件一样.来看一个最简单的例子: <!DOCTYPE html> <html ng ...

随机推荐

  1. IEEE829-2008软件测试文档标准介绍

    1998版中定义了一套文档用于8个已定义的软件测试阶段: 测试计划: 一个管理计划的文档 包括:   测试如何完成 (包括SUT的配置).   谁来做测试   将要测试什么   测试将持续多久 (虽然 ...

  2. 亿级规模的Elasticsearch优化实战

    Elasticsearch 的基本信息大致如图所示,这里就不具体介绍了. 本次分享主要包含两个方面的实战经验:索引性能和查询性能. 一. 索引性能(Index Performance) 首先要考虑的是 ...

  3. RequireJS入门之二——第二例(写自己的模块)

    第一节遗留的问题: 中文乱码:  修改require.js文件,搜索charset 关键字,修改为GBK:(貌似乱不乱码和jquery版本有问题,切换GBK和utf-8!!) 路      径:  仅 ...

  4. 新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World!

    一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World! 一节,新建一个项目:    二.添加引用并修改配置为 Web API (.NET Core 已将 MVC/W ...

  5. 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用

    学习 EF Code First+MVC 时遇到了在请求JsonResult时出现 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用 的异常,原因 ...

  6. 瞄准SMART目标

    瞄准SMART目标 SMART代表具体的/可度量的/可实现的/相关的和时间可控的. 1.具体的  (一个目标任务应该是具体的/事物的具体化) 2.可度量的  (如何知道你何时完成?确贴的数字,度量具体 ...

  7. VS2010中整理代码快捷键

    快捷键:Ctrl+A Ctrl+K Ctrl+F的三个的组合2015-11-08

  8. SharePoint 2013 图文开发系列之可视化WebPart

    有了WebPart开发的基础,再进行可视化WebPart开发,就容易多了.创建和开发过程,两者非常相似,下面,我们简单介绍下可视化WebPart的开发. 1.添加新项目,选择SharePoint 20 ...

  9. How To Search and Restore files from Site Collection Recycle Bin

    $sitecoll = Get-SPSite "http://wheresmydoc.findit.com" $sitecoll.RecycleBin | ?{$_.Title - ...

  10. How To Restart timer service on all servers in farm

    [array]$servers= Get-SPServer | ? {$_.Role -eq "Application"} $farm = Get-SPFarm foreach ( ...