2016-11-04 7 views
4

Я пытаюсь использовать ngMask с material datepicker и не работает.Как использовать ngMask в md-datepicker

У кого-нибудь есть идеи, как заставить его работать вместе?

Некоторые примеры ngMask: http://candreoliveira.github.io/bower_components/angular-mask/examples/index.html#/

+0

мкр-DatePicker получает недействительный поэтому будет блокировать представить, если значение не подходит как действительная дата, однако принудительное применение маски с ней было бы хорошим, по крайней мере, на рабочем столе. вы можете заполнить отчет о проблеме на https://github.com/angular/material и представить им этот код: http://codepen.io/anon/pen/GNRWQd?editors=1000 К сожалению, похоже, нет простой интеграции – Sombriks

+0

Спасибо @Sombriks за ответ. Я выполнил ваши инструкции и открыл вопрос. ** [Проблема № 9976] (https://github.com/angular/material/issues/9976) ** –

ответ

2

Как о чем-то вроде этого:

(function() { 

    'use strict'; 

    /** 
    * Setup a custom date formatter, I'm using moment for example 
    */ 
    angular 
     .module('awesomemodule') 
     .constant('DEFAULT_DATE_FORMAT', 'DD/MM/YYYY') 
     .config(['DEFAULT_DATE_FORMAT', '$mdDateLocaleProvider', dateConfig]); 

    function dateConfig (DEFAULT_DATE_FORMAT, $mdDateLocaleProvider) { 

     $mdDateLocaleProvider.formatDate = osDateFormatter; 

     function osDateFormatter(date) { 
      if (!date) { 
       date = new Date(); 
      } 

      return moment(date).format(DEFAULT_DATE_FORMAT); 
     } 
    } 

})() 


(function() { 
    'use strict'; 

    /** 
    * Decorate the mdDatepickerDirective to add ngMask 
    */ 
    angular 
     .module('awesomemodule') 
     .config(['$provide', checkForNgMask]); 

    function checkForNgMask ($provide) { 

     $provide.decorator('mdDatepickerDirective', function ($delegate) { 
     var directive = $delegate[0]; 

     var template = directive.template; 

     directive.template = function (tElement, tAttrs) { 
      var originalTemplate = template.apply(this, arguments); 

      if (R.has('osMask', tAttrs)) { 
       var element = angular.element(originalTemplate); 
       element.find('input').attr('mask', tAttrs.osMask); 
       element.find('input').attr('ng-model', "ctrl.dateInput");//ng-model is required by ngMask 
       return R.map(R.prop('outerHTML'), R.values(element)).join(""); 
      } 

      return originalTemplate; 
     }; 

     return $delegate; 
    }); 

    } 
})(); 

И использовать директиву, как этот

<md-datepicker ng-model="myAwesomeModel" os-mask="3?9/19/9999"></md-datepicker> 
+0

что такое «R», эта переменная не объявлена ​​ – Higarian

+1

OH извините, я использую http: // ramdajs.com/http://ramdajs.com/ – Daniele

+1

Можете ли вы дать одно решение без Рэндала? Я не хотел ставить другую библиотеку только потому, что хочу поместить маску в поле. это очень помогло бы. Я попытался заменить себя, но я немного смутился, смотрю, как выглядит заявление о возврате – Higarian