2016-09-17 5 views
34

मैं पॉपअप में डेटपिकर (ng-boostrap) का उपयोग कर रहा हूं और मैं दिनांक प्रारूप को 'dd-mm-yyyy' में बदलना चाहता हूं।एनजी-बूटस्ट्रैप: क्या NgbInputDatepicker पर इनपुट मान के प्रारूप को बदलने के लिए कस्टम NgbDateParserFormatter को कार्यान्वित करना सही है?

यह बताता है कि इसे डिफ़ॉल्ट NgbDateISOParserFormatter को प्रतिस्थापित करने के लिए एक नया NgbDateParserFormatter लागू करने का हल किया जा सकता है।

लेकिन मैं सोच रहा था कि कोई और तरीका है या नहीं।

धन्यवाद, नेल्सन।

अद्यतन:

NgbDateParserFormatter का एक छोटा सा कार्यान्वयन moment.js का उपयोग कर

import {NgbDateParserFormatter, NgbDateStruct} from '@ng-bootstrap/ng-bootstrap'; 
import * as moment from 'moment'; 

export class NgbDateMomentParserFormatter extends NgbDateParserFormatter { 
    constructor(private momentFormat: string) { 
     super(); 
    }; 
    format(date: NgbDateStruct): string { 
     if (date === null) { 
      return ''; 
     } 
     let d = moment({ year: date.year, 
         month: date.month - 1, 
         date: date.day }); 
     return d.isValid() ? d.format(this.momentFormat) : ''; 
    } 

    parse(value: string): NgbDateStruct { 
     if (!value) { 
      return null; 
     } 
     let d = moment(value, this.momentFormat); 
     return d.isValid() ? { year: d.year(), 
           month: d.month() + 1, 
           day: d.date() } : null; 
    } 
} 

और एक मॉड्यूल में (एनजी-बूटस्ट्रैप के संस्करण 1.0.0-alpha.14 के साथ परीक्षण), तो आप में शामिल पैरामीटर के रूप में दिनांक प्रारूप को इंगित करने के लिए एक कारखाने का उपयोग कर प्रदाता।

--- 

@NgModule({ 

    --- 

    providers: [ 
    { 
     provide: NgbDateParserFormatter, 
     useFactory:() => { return new NgbDateMomentParserFormatter("DD-MM-YYYY") } 
    } 
    ] 

    --- 

}) 
+0

ध्यान रखें में कुछ और पृष्ठभूमि जानकारी की जाँच कर सकते - पल शून्य अनुक्रमित महीनों की अपेक्षा करता है। आपका कोड दिसम्बर के हर दिन विफल रहता है। – David

+0

धन्यवाद @ डेविड, मैंने कोड तय किया। जब मैंने कोड पोस्ट किया, तो NgbDateStruct शून्य अनुक्रमित महीनों का भी उपयोग कर रहा था, लेकिन बाद में बदल गया। –

+0

@ नेल्सन मैंने आपके दृष्टिकोण की कोशिश की। मैंने अपने दिनांक पिकर घटक के दिनांक प्रारूप को बदलने के लिए मेरे आवेदन के मूल मॉड्यूल में प्रदाताओं को जोड़ा है। यह काम नहीं कर रहा है। मेरी मदद करें। –

उत्तर

15

आज एक कस्टम NgbDateParserFormatter को लागू करने के रूप में जाने के लिए सबसे अच्छा तरीका है। तो हाँ, यह एक सही तरीका है।

भविष्य में हमारे पास NgbDateParserFormatter का एक अधिक परिष्कृत कार्यान्वयन हो सकता है जहां आप केवल वांछित प्रारूप (उदा। yyyy-MM-dd) पास कर पाएंगे। इस सुविधा को जोड़ना उपयोगकर्ता के हित पर निर्भर करेगा।

तुम भी https://github.com/ng-bootstrap/ng-bootstrap/issues/754#issuecomment-247767027

+0

मैं यह भी सोच रहा हूं कि मैं तिथियों पर फॉर्मेट कैसे बदल सकता हूं, क्या बिना किसी पल के 'NgbDateParserFormatter' को कार्यान्वित करने का एक सरल उदाहरण जोड़ना संभव होगा .js मैं बस तारीख को दोबारा सुधारने में सक्षम होना चाहता हूं। – Daimz

+3

@ pkozlowski.opensource अगर हम एओटी संकलन का उपयोग कर रहे हैं तो यह जवाब कैसे बदला जाना चाहिए? मैंने 'निर्यात फ़ंक्शन को प्रबंधित किया है NgbDateMomentParserFormatterFactory() { नया NgbDateMomentParserFormatter (" DD-MM-YYYY ") लौटाएं; } ' और ' प्रदाताओं: [ { प्रदान करते हैं: NgbDateParserFormatter, useFactory: NgbDateMomentParserFormatterFactory }] ' लेकिन यह है कि परिवर्तनों को लागू करने प्रतीत नहीं होता। – murk003

+2

एओटी कंपाइलर का उपयोग करते समय कारखाने का उपयोग न करें। इस उदाहरण को आजमाएं: https: //gist.github.com/nrobinaubertin/61ff1c3db355c74f4e56f485b566ab22 – sgotre

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