00.混乱的前端界

Angular1.x确实是个学习成本很高的框架,刚开始实习那会儿,前端啥也不懂,工头说用Angular,我们这群小弟也只能硬着头皮学。在这之前,前端的东西大部分都用的jQuery,而Angular正好是和jQuery的思维是相反的,开发过程中遇到了不少坑。而Angular团队也放弃了1.x开始开发和React神似的2.0版本,唉,真是沧海桑田啊。
01.Angular vs jQuery
Angular模块化和解耦的思路确实值得一学,但是相对于成熟的jQuery插件库,Angular就显得寒酸了不少,比如,Angular-UI中日期控件是这样的:
丑的不要不要的,还不能选时间,相比之下jQuery就有很多优秀的控件了比如这样的:
此插件传送门:http://xdsoft.net/jqplugins/datetimepicker/
那么问题来了,控件一般是直接像这样$("#xx").val("xx")直接塞值进<input />标签的,这不会触发ng-change事件,ng-model也不会被更新,于是笔者写了个Angular适配指令,来实现这个控件的双向绑定,对于其他jQuery插件,也可以用类似的思路来进行适配。
10.干货
下面是一个Demo,比较两者的不同,注意右边ng-bind的属性使用adapter是会同步变化的↓
Demo传送门:http://xiazai./201701/yuanma/angular.DatetimePicker_jb51.rar
angular.module("directives",[]).directive("datetimepicker",function(){
return {
restrict: "EA", //指令作用范围是element或attribute
require : "ngModel", //控制器是指令标签对应的ngModel
link: function (scope, element, attrs, ctrl) {
var unregister = scope.$watch(function(){ //关键点,下面详述
$(element).append("<input id='date-"+attrs.dateid+"' style='border:none;width:100%' value='"+ctrl.$modelValue+"'>");
//template用不好,于是用这个笨办法加上input标签
element.on('change', function() { //注册onChange事件,设置viewValue
scope.$apply(function() {
ctrl.$setViewValue($("#date-"+attrs.dateid).val());
});
});
element.on('click',function(){ //click触发日期框
$("#date-"+attrs.dateid).datetimepicker({
format : attrs.format || 'Y/m/d h:i', //格式
onClose : function(){ //关闭日期框时手动触发change事件
element.change();
}
});
});
element.click(); //第一次绑定事件,模拟一次click,否则肯能要点两下才会出日期框
return ctrl.$modelValue;
}, initialize);
function initialize(value){ //下面再说
ctrl.$setViewValue(value);
unregister();
}
}
}
});
写这个指令过程中遇到了一个大坑,查了很久才明白,Angular初始化一个ngModel的时候,是会先给它的value置为NaN,初始化必须要先调用$watch()来监测真正值被设置的时候,然后调用上面的initialize方法来设置view值。否则在Controller中设置的初始值会变成NaN。
11.不足之处
原插件是有很多可选项的,我只实现了一个最基本的format,有其他需求的自行改代码吧。可以利用第三个attrs参数获取属性,然后调用原插件的配置方法,来实现更复杂的逻辑。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Angular
# datetimepicker
# 时间插件
# jQuery
# Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板
# 一个可绑定数据源的jQuery数据表格插件
# Jquery 模板数据绑定插件的使用方法详解
# jquery弹窗插件colorbox绑定动态生成元素的方法
# Vue.js列表渲染绑定jQuery插件的正确姿势
# jQuery给动态添加的元素绑定事件的方法
# jquery移除、绑定、触发元素事件使用示例详解
# JQuery中绑定事件(bind())和移除事件(unbind())
# jQuery事件的绑定、触发、及监听方法简单说明
# jQuery事件绑定和委托实例
# jQuery事件绑定on()、bind()与delegate() 方法详解
# jquery 插件重新绑定的处理方法分析
# 来实现
# 绑定
# 过程中
# 是一个
# 传送门
# 是个
# 来了
# 是有
# 就有
# 在这
# 是这样
# 我只
# 才会
# 可以用
# 不懂
# 很久
# 很高
# 写了
# 刚开始
# 沧海桑田
相关文章:
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何构建满足综合性能需求的优质建站方案?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
香港服务器租用费用高吗?如何避免常见误区?
Swift中循环语句中的转移语句 break 和 continue
如何在西部数码注册域名并快速搭建网站?
如何用美橙互联一键搭建多站合一网站?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
北京企业网站设计制作公司,北京铁路集团官方网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
建站之星安装路径如何正确选择及配置?
制作电商网页,电商供应链怎么做?
大同网页,大同瑞慈医院官网?
建站之星后台管理:高效配置与模板优化提升用户体验
,石家庄四十八中学官网?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何在橙子建站中快速调整背景颜色?
,网页ppt怎么弄成自己的ppt?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何在阿里云域名上完成建站全流程?
宝塔面板创建网站无法访问?如何快速排查修复?
电商网站制作价格怎么算,网上拍卖流程以及规则?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
广东企业建站网站优化与SEO营销核心策略指南
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
建站之星安装后界面空白如何解决?
焦点电影公司作品,电影焦点结局是什么?
如何快速启动建站代理加盟业务?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
完全自定义免费建站平台:主题模板在线生成一站式服务
定制建站方案优化指南:企业官网开发与建站费用解析
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何做静态网页,sublimetext3.0制作静态网页?
山东云建站价格为何差异显著?
如何在Windows 2008云服务器安全搭建网站?
建站之星微信建站一键生成小程序+多端营销系统
北京建设网站制作公司,北京古代建筑博物馆预约官网?
如何选择高效响应式自助建站源码系统?
网站制作说明怎么写,简述网页设计的流程并说明原因?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何在Tomcat中配置并部署网站项目?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
linux top下的 minerd 木马清除方法
*请认真填写需求信息,我们会在24小时内与您取得联系。