2016-03-16 5 views
9

हमने हाल ही में एक संस्करण से 1.3.0 से 1.5.0 तक, नवीनतम कोणीय संस्करण का उपयोग करने के लिए हमारे आवेदन को अपडेट किया है।कोणीय 1.3.0 और इनपुट [प्रकार = स्ट्रिंग]

https://github.com/angular/angular.js/issues/9218

हम pikaday दिनांक पिकर का उपयोग करने के लिए हमें सक्षम है कि एक कस्टम निर्देश था:

module.directive('pikaday', function() { 
    return { 
     require: 'ngModel', 
     link: function preLink(scope, element, attrs, controller) { 
      var $element = $(element), 
       momentFormat = 'DD/MM/YYYY', 
       year = new Date().getFullYear(); 

      // init datepicker 
      var picker = new Pikaday(
       { 
        field: document.getElementById(attrs.id), 
        firstDay: 1, 
        format: momentFormat, 
        minDate: new Date((year - 1) + '-01-01'), 
        maxDate: new Date((year + 1) + '-12-31'), 
        yearRange: [year - 1, year + 1], 
        onSelect: function (date) { 
         controller.$setViewValue(date); 
        }, 
        defaultDate: scope.$eval(attrs.ngModel), // require: 'ngModel' 
        setDefaultDate: true 
       }); 

      // format model values to view 
      controller.$formatters.unshift(function (modelValue) { 
       var formatted = (modelValue) 
        ? moment(modelValue).format(momentFormat) 
        : modelValue; 
       return formatted; 
      }); 

      // parse view values to model 
      controller.$parsers.unshift(function (viewValue) { 
       if (viewValue instanceof Date) { 
        return viewValue; 
       } 
       else { 
        return moment(viewValue, momentFormat).toDate(); 
       } 
      }); 
     } 
    }; 
}) 

यह ठीक काम करता था जाहिर है अब हम एक तोड़ने परिवर्तन 1.3.0 में पेश टक्कर , लेकिन अब इस नियंत्रण में एक फॉर्म को बाध्य करने के बाद, मेरे दायरे का मूल्य अचानक एक ऑब्जेक्ट से स्ट्रिंग में बदल दिया जाता है (बिना नियंत्रण के बातचीत के!) मजाकिया बात यह है कि ऐसा कभी भी फ़ॉर्मेटर या पार्सर्स के बिना होता है। तो ऐसा लगता है कि कोणीय सिर्फ स्कोप वैल्यू को बदलने का फैसला करता है क्योंकि इसे "टेक्स्ट" प्रकार का इनपुट बाध्य किया जा रहा है, भले ही इनपुट में मूल्य कभी छू न जाए।

मैं इनपुट [टाइप = टेक्स्ट] का उपयोग नहीं करना चाहता क्योंकि मैं नहीं चाहता कि ब्राउजर अपनी तारीखों को संभालने के लिए मजबूर करे।

यदि मेरे फॉर्मेटर/पार्सर को बुलाया जाएगा तो मुझे पता चलेगा कि इस के आसपास कैसे काम करना है, लेकिन यह मुझे परेशान कर रहा है।

मैं सिर्फ एक समय में एक तारीख को प्रदर्शित करने और pikaday प्लगइन अंडे देने के लिए क्लिक कर सकते हैं एक बटन उपयोगकर्ता हो सकता था, लेकिन मैं उसी रूप में रहने के लिए व्यवहार पसंद करेंगे ...

उत्तर

2

आप इस समाधान से देखा है https://github.com/angular-ui/bootstrap/issues/2659?

directive('datepickerPopup', function(){ 
    return { 
    restrict: 'EAC', 
    require: 'ngModel', 
    link: function(scope, element, attr, controller) { 
    //remove the default formatter from the input directive to prevent conflict 
    controller.$formatters.shift(); 
    } 
} 
}) 

कार्य के आसपास नहीं बहुत अच्छा काम कर रहे फ़ॉर्मेटर 1.3.0 संस्करण द्वारा शुरू की दूर करता है और इस प्रकार यह के साथ इस मुद्दे को हल करता है:

आपको बस इतना करना है एक निर्देश को जोड़ने है।

यह फ़िक्स इसे बनाना चाहिए क्योंकि इसे गीथब थ्रेड में व्यापक रूप से धन्यवाद दिया जाता है।

+0

धन्यवाद मिको। मैंने इसे अपने पिकाडे निर्देश के लिंक फ़ंक्शन की शुरुआत में जोड़ा है। एक जादू की तरह काम करता है। यह एक दयालुता है कि हमें यह काम करने के लिए कोणीय पैच करना है। – Davy

संबंधित मुद्दे