全国咨询热线:18720358503

微信活动报名小程序_Angular指令封装jQuery日期时间

类别:行业新闻 发布时间:2021-01-12 浏览人次:

Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例       这篇文章主要介绍了Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例,具有一定的参考价值,有兴趣的可以了解一下。

00.混乱的前端界

Angular1.x确实是个学习成本很高的框架,刚开始实习那会儿,前端啥也不懂,工头说用Angular,我们这群小弟也只能硬着头皮学。在这之前,前端的东西大部分都用的jQuery,而Angular正好是和jQuery的广州网站建设是相反的,开发过程中遇到了不少坑。而Angular团队也放弃了1.x开始开发和React神似的2.0版本,唉,真是沧海桑田啊。

01.Angular vs jQuery

Angular模块化和解耦的思路确实值得一学,但是相对于成熟的jQuery插件库,Angular就显得寒酸了不少,比如,Angular-UI中日期控件是这样的:

丑的不要不要的,还不能选时间,相比之下jQuery就有很多优秀的控件了比如这样的:

此插件传送门:

那么问题来了,控件一般是直接像这样$("#xx").val("xx")直接塞值进 input / 标签的,这不会触发ng-change事件,ng-model也不会被更新,于是笔者写了个Angular适配指令,来实现这个控件的双向绑定,对于其他jQuery插件,也可以用类似的思路来进行适配。

10.干货

下面是一个Demo,比较两者的不同,注意右边ng-bind的属性使用adapter是会同步变化的↓

Demo传送门:

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+"' 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指令封装jQuery日期时间

Angular命令封裝jQuery时间時间软件datetimepicker完成双重关联实例 本文关键详细介绍了Angular命令封裝jQuery时间時间软件datetimepicker完成双重关联实例,具备一定的参照使用价值,有兴...

2021-01-12
企业网站建设重要的几步

谢谢大伙儿关心《公司企业网站建设关键的两步》话题讨论,搜易高新科技()投身公司企业网站建设、网络推广服务1六年,针对《公司企业网站建设关键的两步》有自身独特的看法,期...

2021-01-12
广西抖音微信小程序_JS完成中国公民身份证号码

JS完成我国中国公民真实身份证号码合理性认证 本文关键详细介绍了JS完成我国中国公民真实身份证号码合理性认证,十分非常好,具备参照效仿使用价值,必须的朋友能够参照下...

2021-01-12
小程序转流应用教程_关于Javascript中document.cooki

有关Javascript中document.cookie的应用 本文关键详细介绍了有关Javascript中document.cookie的应用,根据cookie来记牢登陆密码储存登陆密码作用,必须的朋友能够参照下在cookie的名或值中不可...

2021-01-12
微信小程序是什么-行业动态,大连企业网站建设

现如今各种视頻网站和直播间网站十分的火爆,收看各种各样视頻网站和直播间早已变成大家日常生活中见怪不怪的事儿。很多人见到了视屏直播间的这一填满发展潜力的销售市场,决...

2021-01-12
许多网站管理员在优化网站时往往会忽略这四个

一般网站将会没法在实际操作全过程中开启,或是开启速率很慢。这时候,许多客户能够根据检索模块快照更新,SEO开启相对的网页页面,但网站在的相对照片,百度搜索检索模块提升...

2021-01-12
X

400-8700-61718720358503
企业邮箱2639601583@qq.com
官方微信