欢迎大家指导与讨论 : )

  一 、前言

    由于笔者水平有限,在这里只是分享自己开发组件的一些思路~ 摘要:无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. python征程1.4(初识python)

    1.列表解析. (1)这是一个,让人听起来十分欣喜的术语,代表着你可以通过一个循环将所有值放到一个列表中.python列表解析属于python的迭代中的一种,相比python for循环速度会快很多. ...

  2. Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现

    回到目录 关于逻辑删除 对于逻辑删除之前的做法是在实体类中加个字段,一般是status,其中一种状态是删除,当然也有其它做法,如加个bool的字段IsDeleted,这些其实都过于武断,即它在基类里加 ...

  3. WebApi系列~FromUri参数自动解析成实体的要求

    回到目录 关于webapi我之前写了一些文章,大家可以根据目录去浏览,今天要说的是个怪问题,也是被我忽略的一个问题,当你的Url参数需要被Api自动解析成实体的属性,实事上是要有条件的,不是所以属性都 ...

  4. 前端可视化开发-livereload

    在前端开发中,我们会频繁的修改html.css.js,然后刷新页面,开效果,再调整,再刷新,不知不觉会浪费掉我们很多时间.有没有什么方法,我在编辑器里面改了代码以后,只要保存,浏览器就能实时刷新.经过 ...

  5. css实现图片切换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...

  6. wampserver安装配置

    按步骤安装--选择指定浏览器-安装成功后显示绿色图标: 打开浏览器:将文件夹移入wampserver安装路径的www文件夹中:找到电脑IP 在手机端访问 IP/文件夹/demo.html即可

  7. 完美 全兼容 解决 文字两端对齐 justify 中文姓名对齐

    text-align:justify; 所有浏览器都支持,text-justify之类的却只有IE支持,就不要考虑了. justify我的理解,使元素内部的子元素两端对齐,子元素当然只能是inline ...

  8. app上架流程的整理

    app的上架流程 一.准备工作 首先需要有开发者账号,企业级的账号是299$,个人开发者账号是99$,没有的话可以登录http://developer.apple.com/自行申请 假如你已经有账号了 ...

  9. Linux下安装使用Solr

    Linux下安装使用Solr 1.首先下载Solr.mmseg4j分词包.tomcat并解压,这用google.百度都可以搜索得到下载地址. 2.因为要使用到中文分词,所以要设置编码,进入tomcat ...

  10. 【代码笔记】iOS-获得现在的周的日期

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...