最新国产好看的视频,伊人天堂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/)里的。后來因為各種原因,要換掉UI bootstrap中的日期控件,改用layDate日期控件。

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

問題關(guān)鍵點:layDate操作的是Html元素的,怎么實現(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)實現(xiàn)了。但是,日期組件難免會有日期選擇范圍限制的要求,比如日期可選的最大值,最小值。現(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é)點樹中,故而報錯。

于是希望指令的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)系的實例(推薦)

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

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

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

    這篇文章主要介紹了angular6的table組件開發(fā)的實現(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類框架的編程思想探討,本文通過實現(xiàn)兩個簡單的業(yè)務(wù)需求,探討AngularJS和傳統(tǒng)的JavaScript控制DOM實現(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é)合實例代碼

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

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

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

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

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

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

最新評論

大化| 平果县| 元朗区| 临沂市| 方正县| 读书| 合山市| 广宁县| 宜宾市| 古浪县| 理塘县| 新绛县| 许昌市| 精河县| 广丰县| 前郭尔| 新建县| 游戏| 浮梁县| 宾阳县| 延安市| 扬州市| 蕲春县| 玉门市| 鹤庆县| 郑州市| 丹棱县| 东乡族自治县| 青海省| 望奎县| 迭部县| 太谷县| 海安县| 章丘市| 双桥区| 博客| 平谷区| 农安县| 阿拉善左旗| 灵川县| 米易县|