欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

00.混亂的前端界

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

01.Angular vs jQuery

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

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

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

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

10.干貨

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

Demo傳送門:http://xiazai.jb51.net/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觸發(fā)日期框
          $("#date-"+attrs.dateid).datetimepicker({ 
            format : attrs.format || 'Y/m/d h:i',  //格式
            onClose : function(){          //關閉日期框時手動觸發(fā)change事件
              element.change();
            }
          });
        });

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

        return ctrl.$modelValue;
      }, initialize);

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

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

11.不足之處

原插件是有很多可選項的,我只實現(xiàn)了一個最基本的format,有其他需求的自行改代碼吧。可以利用第三個attrs參數(shù)獲取屬性,然后調用原插件的配置方法,來實現(xiàn)更復雜的邏輯。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • angular.js之路由的選擇方法

    angular.js之路由的選擇方法

    下面小編就為大家?guī)硪黄猘ngular.js之路由的選擇方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • AngularJs Understanding the Model Component

    AngularJs Understanding the Model Component

    本文主要介紹AngularJs Understanding the Model Component的內容,這里整理了相關資料,并詳細講解了這部分知識,有興趣的小伙伴可以參考下
    2016-09-09
  • angularjs學習筆記之三大模塊(modal,controller,view)

    angularjs學習筆記之三大模塊(modal,controller,view)

    本文給大家記錄的是angularjs的三大模塊(modal,controller,view)的使用說明,方便初學者能夠順利的學習angularjs.
    2015-09-09
  • AngularJS刪除路由中的#符號的方法

    AngularJS刪除路由中的#符號的方法

    這篇文章主要介紹了AngularJS刪除路由中的#符號的方法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Angular8 簡單表單驗證的實現(xiàn)示例

    Angular8 簡單表單驗證的實現(xiàn)示例

    這篇文章主要介紹了Angular8 簡單表單驗證的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Angularjs 滾動加載更多數(shù)據(jù)

    Angularjs 滾動加載更多數(shù)據(jù)

    AngularJS 通過新的屬性和表達式擴展了 HTML。本文主要給大家介紹Angularjs 滾動加載更多數(shù)據(jù)的相關知識,需要的朋友參考下吧
    2016-03-03
  • AngularJS延遲加載html template

    AngularJS延遲加載html template

    這篇文章主要介紹了AngularJS延遲加載html template 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • 詳解在AngularJS的controller外部直接獲取$scope

    詳解在AngularJS的controller外部直接獲取$scope

    本篇文章主要介紹了詳解在AngularJS的controller外部直接獲取$scope ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 解決Angular2 router.navigate刷新頁面的問題

    解決Angular2 router.navigate刷新頁面的問題

    今天小編就為大家分享一篇解決Angular2 router.navigate刷新頁面的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 解析Angular 2+ 樣式綁定方式

    解析Angular 2+ 樣式綁定方式

    這篇文章主要介紹了解析Angular 2+ 樣式綁定方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論