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

Angularjs中使用layDate日期控件示例

 更新時間:2017年01月11日 14:52:23   作者:茜瓜  
本篇文章主要介紹了Angularjs中使用layDate日期控件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

layDate 控件地址:http://laydate.layui.com/

前情:原來系統(tǒng)中使用的日期控件是UI bootstrap(地址:https://angular-ui.github.io/bootstrap/)里的。后來因?yàn)楦鞣N原因,要換掉UI bootstrap中的日期控件,改用layDate日期控件。

解決思路:將layDate的初始化及相關(guān)代碼定義在指令里。

問題關(guān)鍵點(diǎn):layDate操作的是Html元素的,怎么實(shí)現(xiàn)雙向綁定,同步Angularjs模板值和Html的元素值。

指令具體代碼:

/**
     * 使用示例
     * <input def-laydate type="text" id="id1" ng-model="startTime"/>
     */
    app
    .directive('defLaydate', function() {
      return {
        require: '?ngModel',
        restrict: 'A',
        scope: {
          ngModel: '='
        },
        link: function(scope, element, attr, ngModel) {
          var _date = null,_config={};
          
            // 初始化參數(shù) 
          _config = {
            elem: '#' + attr.id,
            format: attr.format != undefined && attr.format != '' ? attr.format : 'YYYY-MM-DD',
            max:attr.hasOwnProperty('maxDate')?attr.maxDate:'',
            min:attr.hasOwnProperty('minDate')?attr.minDate:'',
            choose: function(data) {
              scope.$apply(setViewValue);
              
            },
            clear:function(){
              ngModel.$setViewValue(null);
            }
          };
          // 初始化
          _date= laydate(_config);

         
          
          // 模型值同步到視圖上
          ngModel.$render = function() {
            element.val(ngModel.$viewValue || '');
          };

          // 監(jiān)聽元素上的事件
          element.on('blur keyup change', function() {
            scope.$apply(setViewValue);
          });

          setViewValue();

          // 更新模型上的視圖值
          function setViewValue() {
            var val = element.val();
            ngModel.$setViewValue(val);
          }
        } 
      }
    })

---以上代碼使用示例為 <input def-laydate type="text" id="id1" ng-model="startTime"/>

注意:1.指令只能用做元素屬性。2.元素必須要有唯一id屬性。

 到此為止,在Angularjs里使用laydate的基本目標(biāo)實(shí)現(xiàn)了。但是,日期組件難免會有日期選擇范圍限制的要求,比如日期可選的最大值,最小值?,F(xiàn)對指令做優(yōu)化以滿足要求:

app.directive('defLaydate', function() {
      return {
        require: '?ngModel',
        restrict: 'A',
        scope: {
          ngModel: '=',
          maxDate:'@',
          minDate:'@'
        },
        link: function(scope, element, attr, ngModel) {
          var _date = null,_config={};
          
            // 初始化參數(shù) 
          _config = {
            elem: '#' + attr.id,
            format: attr.format != undefined && attr.format != '' ? attr.format : 'YYYY-MM-DD',
            max:attr.hasOwnProperty('maxDate')?attr.maxDate:'',
            min:attr.hasOwnProperty('minDate')?attr.minDate:'',
            choose: function(data) {
              scope.$apply(setViewValue);
              
            },
            clear:function(){
              ngModel.$setViewValue(null);
            }
          };
          // 初始化
          _date= laydate(_config);
          
          // 監(jiān)聽日期最大值
          if(attr.hasOwnProperty('maxDate')){
            attr.$observe('maxDate', function (val) {
              _config.max = val;
            })
          }
          // 監(jiān)聽日期最小值
          if(attr.hasOwnProperty('minDate')){
            attr.$observe('minDate', function (val) {
              _config.min = val;
            })
          }
          
          // 模型值同步到視圖上
          ngModel.$render = function() {
            element.val(ngModel.$viewValue || '');
          };

          // 監(jiān)聽元素上的事件
          element.on('blur keyup change', function() {
            scope.$apply(setViewValue);
          });

          setViewValue();

          // 更新模型上的視圖值
          function setViewValue() {
            var val = element.val();
            ngModel.$setViewValue(val);
          }
        } 
      }
    })

 ---以上代碼使用示例為 <input def-laydate type="text" id="id1" ng-model="startTime"  max-date="{{model.max}}" min-date="{{model.min}}"/> min-date,max-date屬性按需添加。

這樣的指令一般情況下已經(jīng)可以滿足使用,但是在結(jié)合ngDialog使用時出現(xiàn)了問題:layDate在初始化中g(shù)etElementById 獲取元素時,彈窗中的html內(nèi)容還沒有持到頁面的結(jié)點(diǎn)樹中,故而報(bào)錯。

于是希望指令的link代碼可以在彈窗渲染后再執(zhí)行,查找資料后,在指令中引入了$timeout:

app.directive('ngcLayDate', function($timeout) {
      return {
        require: '?ngModel',
        restrict: 'A',
        scope: {
          ngModel: '=',
          maxDate:'@',
          minDate:'@'
        },
        link: function(scope, element, attr, ngModel) {
          var _date = null,_config={};
           // 渲染模板完成后執(zhí)行
          $timeout(function(){ 
            // 初始化參數(shù) 
            _config = {
              elem: '#' + attr.id,
              format: attr.format != undefined && attr.format != '' ? attr.format : 'YYYY-MM-DD',
              max:attr.hasOwnProperty('maxDate')?attr.maxDate:'',
              min:attr.hasOwnProperty('minDate')?attr.minDate:'',
              choose: function(data) {
                scope.$apply(setViewValue);
                
              },
              clear:function(){
                ngModel.$setViewValue(null);
              }
            };
            // 初始化
            _date= laydate(_config);

            // 監(jiān)聽日期最大值
            if(attr.hasOwnProperty('maxDate')){
              attr.$observe('maxDate', function (val) {
                _config.max = val;
              })
            }
            // 監(jiān)聽日期最小值
            if(attr.hasOwnProperty('minDate')){
              attr.$observe('minDate', function (val) {
                _config.min = val;
              })
            }
            
            // 模型值同步到視圖上
            ngModel.$render = function() {
              element.val(ngModel.$viewValue || '');
            };

            // 監(jiān)聽元素上的事件
            element.on('blur keyup change', function() {
              scope.$apply(setViewValue);
            });

            setViewValue();

            // 更新模型上的視圖值
            function setViewValue() {
              var val = element.val();
              ngModel.$setViewValue(val);
            }
          },0); 
        }
      };
    })

OK,問題解決。解決問題的過程伴隨著查資料的過程,是一步步完善的。也希望大家在遇到同樣的問題時少走彎路

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

相關(guān)文章

  • RequireJS 依賴關(guān)系的實(shí)例(推薦)

    RequireJS 依賴關(guān)系的實(shí)例(推薦)

    下面小編就為大家?guī)硪黄猂equireJS 依賴關(guān)系的實(shí)例(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • angular6的table組件開發(fā)的實(shí)現(xiàn)示例

    angular6的table組件開發(fā)的實(shí)現(xiàn)示例

    這篇文章主要介紹了angular6的table組件開發(fā)的實(shí)現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Angular6筆記之封裝http的示例代碼

    Angular6筆記之封裝http的示例代碼

    這篇文章主要介紹了Angular6筆記之封裝http的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解angularjs中的隔離作用域理解以及綁定策略

    詳解angularjs中的隔離作用域理解以及綁定策略

    本篇文章主要介紹了詳解angularjs中的隔離作用域理解以及綁定策略,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • AngularJS入門知識之MVW類框架的編程思想探討

    AngularJS入門知識之MVW類框架的編程思想探討

    這篇文章主要介紹了AngularJS入門知識之MVW類框架的編程思想探討,本文通過實(shí)現(xiàn)兩個簡單的業(yè)務(wù)需求,探討AngularJS和傳統(tǒng)的JavaScript控制DOM實(shí)現(xiàn)方式的差別,并嘗試?yán)斫?MVW此類框架在流行的Web前端開發(fā)中的編程思想,需要的朋友可以參考下
    2014-12-12
  • Angularjs全局變量被作用域監(jiān)聽的正確姿勢

    Angularjs全局變量被作用域監(jiān)聽的正確姿勢

    這篇文章主要介紹了Angularjs全局變量被作用域監(jiān)聽的正確姿勢的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 使用Raygun來自動追蹤AngularJS中的異常

    使用Raygun來自動追蹤AngularJS中的異常

    這篇文章主要介紹了使用Raygun來自動追蹤AngularJS中的異常,AngularJS是一款高人氣的JavaScript庫,需要的朋友可以參考下
    2015-06-06
  • Angular和百度地圖的結(jié)合實(shí)例代碼

    Angular和百度地圖的結(jié)合實(shí)例代碼

    最近在angular的項(xiàng)目,但是我用直接引用百度地圖的方法引進(jìn)js,寫html,js代碼,發(fā)現(xiàn)報(bào)錯,接下來通過本文給大家介紹angular和百度地圖的結(jié)合,需要的朋友可以參考下
    2016-10-10
  • Angular指令之restict匹配模式的詳解

    Angular指令之restict匹配模式的詳解

    這篇文章主要介紹了Angular指令之restict匹配模式的詳解的相關(guān)資料,這里對Angularjs 中restict匹配模式進(jìn)行詳解并列舉了四種模式進(jìn)行比較,需要的朋友可以參考下
    2017-07-07
  • 淺談angularJS的$watch失效問題的解決方案

    淺談angularJS的$watch失效問題的解決方案

    本篇文章主要介紹了淺談angularJS的$watch失效問題的解決方案,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-08-08

最新評論

浦东新区| 榆树市| 贵南县| 天祝| 河间市| 南靖县| 彩票| 广德县| 海口市| 安图县| 大英县| 伊金霍洛旗| 噶尔县| 河东区| 巴林右旗| 顺义区| 西吉县| 张家港市| 寿宁县| 大埔区| 勃利县| 无为县| 永兴县| 株洲县| 上犹县| 拉萨市| 南木林县| 苏尼特左旗| 铅山县| 盐边县| 衡山县| 弥渡县| 三原县| 宝鸡市| 建瓯市| 佳木斯市| 长泰县| 大厂| 密云县| 广德县| 筠连县|