AngularJS之开发组件的一些思路
欢迎大家指导与讨论 : )
一 、前言
由于笔者水平有限,在这里只是分享自己开发组件的一些思路~ 摘要:无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之开发组件的一些思路的更多相关文章
- AngularJS进阶(三十一)AngularJS项目开发技巧之获取模态对话框中的组件ID
AngularJS项目开发技巧之获取模态对话框中的组件ID 需求 出于项目开发需求,需要实现的业务逻辑是:药店端点击查看"已发货""已收货"订单详情时,模块弹出 ...
- AngularJS进阶(三十六)AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记)
AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记) 前言 在"AngularJS项目开发技巧之图片预加载" ...
- AngularJS进阶(三十)AngularJS项目开发技巧之图片预加载
AngularJS项目开发技巧之图片预加载 绪 项目(移动端采用Ionic 框架)开发完毕,测试阶段发现移动APP首页的广告图片(图片由服务器端返回相应url地址)很难加载,主要原因还是网速.如下图左 ...
- Vue + Element-ui实现后台管理系统(4)---封装一个ECharts组件的一点思路
封装一个ECharts组件的一点思路 有关后台管理系统之前写过三遍博客,看这篇之前最好先看下这三篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system ...
- AngularJs的UI组件ui-Bootstrap分享(一)
最近几个月学习了AngularJs和扩展的UI组件,并在公司小组内做了一次分享交流,感觉很有收获,在此记录下个人的学习心得. 目录: AngularJs的UI组件ui-Bootstrap分享(一) A ...
- AngularJs的UI组件ui-Bootstrap分享(十四)——Carousel
Carousel指令是用于图片轮播的控件,引入ngTouch模块后可以在移动端使用滑动的方式使用轮播控件. <!DOCTYPE html> <html ng-app="ui ...
- AngularJs的UI组件ui-Bootstrap分享(十三)——Progressbar
进度条控件有两种指令,第一种是uib-progressbar指令,表示单一颜色和进度的一个进度条.第二种是uib-bar和uib-progress指令,表示多种颜色和多个进度组合而成的一个进度条. 这 ...
- AngularJs的UI组件ui-Bootstrap分享(十二)——Rating
Rating是一个用于打分或排名的控件.看一个最简单的例子: <!DOCTYPE html> <html ng-app="ui.bootstrap.demo" x ...
- AngularJs的UI组件ui-Bootstrap分享(十一)——Typeahead
Typeahead指令是一个用于智能提示或自动完成的控件,就像Jquery的AutoComplete控件一样.来看一个最简单的例子: <!DOCTYPE html> <html ng ...
随机推荐
- 微软Microsoft开源历程与相关资源
2001 Open source is bad for business, saysMicrosoft Linux is a cancer 2005 Enterprise Library 1.0 re ...
- MVC数据传递
一.数据传递 1.ViewData[]: 用法:action中:ViewData["key"]="aaa";,V层接收ViewData["key&qu ...
- CSS3 float深入理解浮动资料整理
CSS浮动(float,clear)通俗讲解 CSS 浮动 CSS float浮动的深入研究.详解及拓展(一) CSS float浮动的深入研究.详解及拓展(二) 1.浮动实现图文环绕(理解难点) 浮 ...
- jQuery实现页面内锚点平滑跳转
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以 ...
- 初识HTML
前面的话 HTML文档的后缀一般都是.html,但是在以前,.htm后缀也是不少的,它们都代表html文档,实际上也没有本质的区别.htm是在win32时代,系统只能识别3位扩展名时使用的.现在一般都 ...
- CSS :first-child 选择器 和 HTML DOM firstChild 属性
CSS 选择器参考手册 实例 选择属于其父元素的首个子元素的每个 <p> 元素,并为其设置样式: p:first-child { background-color:yellow; } 亲自 ...
- eclipse启动时报错 Could not create the java virtual machine
eclipse启动的时候 报错 这是系统为eclipse分配的内存不足,需要去修改 eclipse.ini文件 eclipse.ini是eclipse 内存分配之类的配置文件 对java虚拟机的 ...
- sourceTree忽略文件
*~.DS_Store*.xcworkspacexcuserdata Podfile.lockPods
- Android添加图片到ListView或者 RecyclerView显示
先上图 点击+号就去选择图片 实际上这个添加本身就是一个ListView或者 RecyclerView 只是布局有些特殊 item <?xml version="1.0" e ...
- CoreLocation定位技术
CoreLocation框架可用于定位设备当前经纬度,通过该框架,应用程序可通过附近的蜂窝基站,WIFI信号或者GPS等信息计算用户位置. iOS定位支持的3种模式. (1)GPS ...