最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angular指令封裝jQuery日期時(shí)間插件datetimepicker實(shí)現(xiàn)雙向綁定示例

 更新時(shí)間:2017年01月22日 16:35:37   作者:Code2Life  
這篇文章主要介紹了Angular指令封裝jQuery日期時(shí)間插件datetimepicker實(shí)現(xiàn)雙向綁定示例,具有一定的參考價(jià)值,有興趣的可以了解一下。

00.混亂的前端界

Angular1.x確實(shí)是個(gè)學(xué)習(xí)成本很高的框架,剛開(kāi)始實(shí)習(xí)那會(huì)兒,前端啥也不懂,工頭說(shuō)用Angular,我們這群小弟也只能硬著頭皮學(xué)。在這之前,前端的東西大部分都用的jQuery,而Angular正好是和jQuery的思維是相反的,開(kāi)發(fā)過(guò)程中遇到了不少坑。而Angular團(tuán)隊(duì)也放棄了1.x開(kāi)始開(kāi)發(fā)和React神似的2.0版本,唉,真是滄海桑田啊。

01.Angular vs jQuery

Angular模塊化和解耦的思路確實(shí)值得一學(xué),但是相對(duì)于成熟的jQuery插件庫(kù),Angular就顯得寒酸了不少,比如,Angular-UI中日期控件是這樣的:

丑的不要不要的,還不能選時(shí)間,相比之下jQuery就有很多優(yōu)秀的控件了比如這樣的:

此插件傳送門:http://xdsoft.net/jqplugins/datetimepicker/

那么問(wèn)題來(lái)了,控件一般是直接像這樣$("#xx").val("xx")直接塞值進(jìn)<input />標(biāo)簽的,這不會(huì)觸發(fā)ng-change事件,ng-model也不會(huì)被更新,于是筆者寫了個(gè)Angular適配指令,來(lái)實(shí)現(xiàn)這個(gè)控件的雙向綁定,對(duì)于其他jQuery插件,也可以用類似的思路來(lái)進(jìn)行適配。

10.干貨

下面是一個(gè)Demo,比較兩者的不同,注意右邊ng-bind的屬性使用adapter是會(huì)同步變化的↓

Demo傳送門:http://xiazai.jb51.net/201701/yuanma/angular.DatetimePicker_jb51.rar

angular.module("directives",[]).directive("datetimepicker",function(){
  return {
    restrict: "EA",  //指令作用范圍是element或attribute
    require : "ngModel", //控制器是指令標(biāo)簽對(duì)應(yīng)的ngModel
    link: function (scope, element, attrs, ctrl) {

      var unregister = scope.$watch(function(){        //關(guān)鍵點(diǎn),下面詳述

        $(element).append("<input id='date-"+attrs.dateid+"' style='border:none;width:100%' value='"+ctrl.$modelValue+"'>");
 //template用不好,于是用這個(gè)笨辦法加上input標(biāo)簽

        element.on('change', function() { //注冊(cè)onChange事件,設(shè)置viewValue
          scope.$apply(function() {
            ctrl.$setViewValue($("#date-"+attrs.dateid).val());
          });
        });

        element.on('click',function(){  //click觸發(fā)日期框
          $("#date-"+attrs.dateid).datetimepicker({ 
            format : attrs.format || 'Y/m/d h:i',  //格式
            onClose : function(){          //關(guān)閉日期框時(shí)手動(dòng)觸發(fā)change事件
              element.change();
            }
          });
        });

        element.click();    //第一次綁定事件,模擬一次click,否則肯能要點(diǎn)兩下才會(huì)出日期框

        return ctrl.$modelValue;
      }, initialize);

      function initialize(value){ //下面再說(shuō)
        ctrl.$setViewValue(value);
        unregister();
      }
    }
  }
});

寫這個(gè)指令過(guò)程中遇到了一個(gè)大坑,查了很久才明白,Angular初始化一個(gè)ngModel的時(shí)候,是會(huì)先給它的value置為NaN,初始化必須要先調(diào)用$watch()來(lái)監(jiān)測(cè)真正值被設(shè)置的時(shí)候,然后調(diào)用上面的initialize方法來(lái)設(shè)置view值。否則在Controller中設(shè)置的初始值會(huì)變成NaN。

11.不足之處

原插件是有很多可選項(xiàng)的,我只實(shí)現(xiàn)了一個(gè)最基本的format,有其他需求的自行改代碼吧??梢岳玫谌齻€(gè)attrs參數(shù)獲取屬性,然后調(diào)用原插件的配置方法,來(lái)實(shí)現(xiàn)更復(fù)雜的邏輯。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • AngularJS ionic手勢(shì)事件的使用總結(jié)

    AngularJS ionic手勢(shì)事件的使用總結(jié)

    本篇文章主要介紹了AngularJS手勢(shì)事件的使用總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • AngularJS實(shí)現(xiàn)的生成隨機(jī)數(shù)與猜數(shù)字大小功能示例

    AngularJS實(shí)現(xiàn)的生成隨機(jī)數(shù)與猜數(shù)字大小功能示例

    這篇文章主要介紹了AngularJS實(shí)現(xiàn)的生成隨機(jī)數(shù)與猜數(shù)字大小功能,結(jié)合完整實(shí)例形式分析了AngularJS隨機(jī)數(shù)生成與數(shù)值判定相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • AngularJS實(shí)現(xiàn)頁(yè)面定時(shí)刷新

    AngularJS實(shí)現(xiàn)頁(yè)面定時(shí)刷新

    本篇文章主要介紹了AngularJS實(shí)現(xiàn)頁(yè)面定時(shí)刷新,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • 詳解angularjs結(jié)合pagination插件實(shí)現(xiàn)分頁(yè)功能

    詳解angularjs結(jié)合pagination插件實(shí)現(xiàn)分頁(yè)功能

    本篇文章主要介紹了詳解angularjs結(jié)合pagination插件實(shí)現(xiàn)分頁(yè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • angularJs利用$scope處理升降序的方法

    angularJs利用$scope處理升降序的方法

    今天小編就為大家分享一篇angularJs利用$scope處理升降序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • angular仿支付寶密碼框輸入效果

    angular仿支付寶密碼框輸入效果

    本篇文章主要介紹了angular仿支付寶密碼框輸入效果,詳細(xì)的介紹了使用ng寫一個(gè)密碼框格子支付模塊,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-03-03
  • 如何在Angular8.0下使用ngx-translate進(jìn)行國(guó)際化配置

    如何在Angular8.0下使用ngx-translate進(jìn)行國(guó)際化配置

    這篇文章主要介紹了如何在Angular8.0下使用ngx-translate進(jìn)行國(guó)際化配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • AngularJS基礎(chǔ) ng-if 指令用法

    AngularJS基礎(chǔ) ng-if 指令用法

    本文主要介紹了AngularJS ng-if 指令,在這里整理了一些ng-if 指令的基礎(chǔ)資料,并有實(shí)例代碼,有需要的同學(xué)可以參考下
    2016-08-08
  • 詳解AngularJS跨頁(yè)面?zhèn)髦担╱i-router)

    詳解AngularJS跨頁(yè)面?zhèn)髦担╱i-router)

    本篇文章主要介紹了詳解AngularJS跨頁(yè)面?zhèn)髦担╱i-router),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 舉例詳解AngularJS中ngShow和ngHide的使用方法

    舉例詳解AngularJS中ngShow和ngHide的使用方法

    這篇文章主要介紹了舉例詳解AngularJS中ngShow和ngHide的使用方法,AngularJS是一款非常熱門的JavaScript框架,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

堆龙德庆县| 华亭县| 饶河县| 湟中县| 德兴市| 成武县| 万载县| 宜阳县| 荥阳市| 封丘县| 静安区| 尉犁县| 营山县| 桐柏县| 汾阳市| 隆子县| 仙游县| 吉安县| 嘉兴市| 高阳县| 邻水| 朝阳市| 阜新| 开阳县| 铁力市| 平遥县| 那坡县| 河东区| 崇义县| 山东| 乐业县| 临汾市| 忻城县| 和顺县| 屏南县| 米泉市| 安图县| 顺昌县| 白水县| 德惠市| 宁都县|