javascript कोणीय सामग्री md-datepicker त्रुटि क्लिक करता है जब त्रुटि




angularjs firebase (2)

आपके पास $ mdDateLocaleProvider के कॉन्फ़िगरेशन को जोड़ने से पहले आपके पास ऐसा ही समस्या थी मुझे टाइप-एरर मिल रहा था: date.toLocaleDateString फ़ंक्शन नहीं है।

मैं भी फायरबेज का प्रयोग कर रहा था और बिना किसी समस्या के पुश करने में सक्षम था। मैं सहेजी हुई परिणाम के साथ दिनांक पिक्चर भी देख सकता था, यह केवल ref.update पर था कि मुझे त्रुटि मिलती है मैंने बग को शिकार करने में काफी समय बिताया और अंत में मुझे पता चला कि कोणीय सामग्री मेरी तिथि के माध्यम से कोणीय के डाइजेस्ट चक्र की वजह से मेरी तारीख को चला रही थी और दूसरी बार जेएस दिनांक ऑब्जेक्ट की स्ट्रिंग का प्रतिनिधित्व करती थी और नहीं तारीख obj खुद (इसलिए TypeError: date.toLocaleDateString फ़ंक्शन नहीं है - क्योंकि यह दिनांक को स्ट्रिंग के रूप में इलाज कर रहा था और कोई दिनांक Obj नहीं।)

दुर्भाग्य से, मैं अपने वास्तविक ऐप में ठीक से नहीं आ सकता था इसलिए मुझे कोणीय- material.js स्रोत में जाना पड़ा और त्रुटि को ठीक करने से पहले मैंने उस तिथि को ले लिया था जो उस पारित हो रही थी और इसे सुनिश्चित किया गया तिथि (डी = नया दिनांक (डी));

यह मेरे लिए काम करता है क्योंकि यह हमेशा या तो दिनांक या तार का तार होता था - या तो यह सुनिश्चित करता है कि यह वास्तविक दिनांक ऑब्जेक्ट है

मैं यहां नया हूँ और हाल ही में उपलब्ध एमडी-डेडेक्कर के साथ कोणीय सामग्री 0.11.0 द्वारा कुछ समस्याएं आ रही हैं: https://material.angularjs.org/0.11.0/#/demo/material.components.datepicker

संक्षेप में, मेरा ऐप उपयोगकर्ताओं को नाम और विवरण के साथ अलग-अलग परियोजनाओं को जोड़ने की अनुमति देता है। वे प्रासंगिक परियोजना विवरण अपडेट करने में भी सक्षम हैं।

सामग्री डिज़ाइन एमडीडीआईएलओॉग के माध्यम से दोनों को जोड़ना और अद्यतन किया जाता है एक बार यूजर को क्लिक या अपडेट करने पर क्लिक करता है, तो नियंत्रक संबंधित फ़ंक्शन कॉल करता है जो कि मेरे फ़ैक्टरी में संबंधित फ़ंक्शन कॉल करता है।

फ़ैक्टरी फ़ंक्शन में $ mdDialog सेवा है जिसे मैंने कॉन्फ़िगर किया है। मैं अपडेट करने और किसी भी समस्या के बिना जोड़ने में सक्षम था जब तक कि मैंने md-datepicker जोड़ा नहीं।

जब मैंने संपादित करने के लिए क्लिक किया तो मुझे निम्नलिखित त्रुटि मिली

TypeError: date.toLocaleDateString is not a function
at Object.defaultFormatDate [as formatDate] (angular-material.js:6858)
at DatePickerCtrl.configureNgModel.ngModelCtrl.$render (angular-material.js:7182)
at Object.ngModelWatch (angular.js:25353)
at Scope.parent.$get.Scope.$digest (angular.js:15751)
at Scope.parent.$get.Scope.$apply (angular.js:16030)
at done (angular.js:10545)
at completeRequest (angular.js:10717)
at XMLHttpRequest.requestLoaded (angular.js:10658)

चारों ओर देखकर, मुझे पता चला कि मुझे एमडी-डेडेक्कर को कॉन्फ़िगर करना चाहिए। मैंने प्रेरणा फॉर्म https://material.angularjs.org/HEAD/#/api/material.components.datepicker/service/ $ mdDateLocaleProvider लिया और मेरे मुख्य AngularJS ऐप के लिए .config के रूप में निम्न कोड जोड़ दिया (मैं देने के लिए momentjs का उपयोग कर रहा हूँ उपयोगकर्ता अपने लोकेल के आधार पर तारीख)।

app.config(function($mdDateLocaleProvider) {
$mdDateLocaleProvider.formatDate = function(date) {
   return moment(date).format('L');
};});

अब मैं 'add' कारखाने में निम्नलिखित कोड के साथ एक परियोजना जोड़ सकता हूं। मैं अपनी पसंद की तारीख भी जोड़ सकता हूं और मैं इसे युग के समय में फायरबेस को बचा सकता हूं।

        return $mdDialog.show({
            clickOutsideToClose: true,
            controller: function($mdDialog) {
                var vm = this;
                vm.project = project;
                vm.add = function(project) {
                    var date = new Date();
                    project.deadline = date.getTime();

                    if(project.deadline == undefined) {
                        project.deadline = null;
                    };

                    FBprojects.$add(project);
                    console.log(project);
                    $mdDialog.hide();
                };
            },
            controllerAs: 'PAmodal',
            templateUrl: 'views/newproject.html',
            targetEvent: e
        })

समस्या तब उठती है जब मैं दिनांक को बदलने के लिए md-datepicker के कैलेंडर आइकन पर विशेष रूप से क्लिक करता हूं (एक बार $ mdDialog अपडेट करें)।

TypeError: date.getFullYear is not a function
at CalendarCtrl.getDateId (angular-material.js:6427)
at angular-material.js:6349
at processQueue (angular.js:14678)
at angular.js:14694
at Scope.parent.$get.Scope.$eval (angular.js:15922)
at Scope.parent.$get.Scope.$digest (angular.js:15733)
at Scope.parent.$get.Scope.$apply (angular.js:16030)
at HTMLButtonElement.<anonymous> (angular.js:23486)
at HTMLButtonElement.jQuery.event.dispatch (jquery.js:4435)
at HTMLButtonElement.jQuery.event.add.elemData.handle (jquery.js:4121)(anonymous function) @ angular.js:12450ident.$get @ angular.js:9237processQueue @ angular.js:14686(anonymous function) @ angular.js:14694parent.$get.Scope.$eval @ angular.js:15922parent.$get.Scope.$digest @ angular.js:15733parent.$get.Scope.$apply @ angular.js:16030(anonymous function) @ angular.js:23486jQuery.event.dispatch @ jquery.js:4435jQuery.event.add.elemData.handle @ jquery.js:4121

Uncaught TypeError: end.getFullYear is not a function

TypeError: date.getFullYear is not a function
at CalendarCtrl.getDateId (http://localhost:9000/bower_components/angular-material/angular-material.js:6427:12)
at CalendarCtrl.focus (http://localhost:9000/bower_components/angular-material/angular-material.js:6298:23)
at http://localhost:9000/bower_components/angular-material/angular-material.js:7372:30
at http://localhost:9000/bower_components/angular-material/angular-material.js:1068:11
at Array.forEach (native)
at processQueue (http://localhost:9000/bower_components/angular-material/angular-material.js:1067:15)
at http://localhost:9000/bower_components/angular/angular.js:17788:31
at completeOutstandingRequest (http://localhost:9000/bower_components/angular/angular.js:5498:10)
at http://localhost:9000/bower_components/angular/angular.js:5775:7

इस बिंदु पर एमडी-डेडेक्कर का यह पता नहीं है कि वह वर्ष किस समय है और लगभग 1 9 33 के आसपास शुरू होता है। अजीब तरह से अगर मैं आइकन पर क्लिक नहीं करता और पहले इनपुट में तिथि बदलूंगा, तो मैं उस आइकन पर क्लिक कर सकता हूं जो कैलेंडर सही तिथि पर मैं यह तब तक कर सकता हूं जब तक मेरी वर्तमान एमडीडीआलाओग बंद नहीं होती है। फिर, जब मैं अपडेट पर क्लिक करता हूं, तो यह कभी-कभी फायरबसे पर तारीख को अपडेट करता है मुझे अभी भी यह पता नहीं है कि यह सुसंगत क्यों नहीं है। परियोजना को अद्यतन करने के लिए निम्नलिखित कोड को नियंत्रक के माध्यम से कहा जाता है

। अगर मैं md-datepicker को छोड़ दिया है, मैं अपने अन्य डेटा को ठीक कर सकता हूं।

        updateProject: function(e, currentProject) {
        return $mdDialog.show({
            clickOutsideToClose: true,
            controller: function($mdDialog) {
                var vm = this;
                vm.project = {};
                vm.project = currentProject;

                var pid = $stateParams.pid;
                var n = vm.project.deadline;
                var d = new Date(n).toString();

                vm.update = function() {
                    //Updates at FB locations with updated project
                    ref.child('projects').child(pid).update({
                        title: vm.project.title,
                        description: vm.project.description,
                        deadline: d
                    });
                    $mdDialog.hide();
                };
            },
            controllerAs: 'PEmodal',
            templateUrl: 'views/updateproject.html',
            parent: angular.element(document.body),
            targetEvent: e
        });

मैं कुछ देर के लिए इस समस्या पर फंस गया हूं, और इस पर कुछ प्रकाश की सराहना होगी। आपका समय देने के लिए आभार।


निम्नलिखित कोड को छोड़ दिया गया क्योंकि यह प्रश्न में है।

app.config(function($mdDateLocaleProvider) {
$mdDateLocaleProvider.formatDate = function(date) {
   return moment(date).format('L');
};});

यह 'TypeError: date.toLocaleDateString फ़ंक्शन नहीं है' त्रुटि को समाप्त करता है

पूरे युग में केवल मुझे रुचि है। मुझे नहीं पता था कि md-datepicker केवल दिनांक वस्तुओं को पसंद करता है यह बताता है कि मैं परियोजना को क्यों अपडेट नहीं कर सकता .deadline क्योंकि यह युग का समय पढ़ रहा था यह इसे ठीक देख पा रहा था, लेकिन इसे बदलकर त्रुटियों का परिणाम बदल गया क्योंकि यह पता नहीं लगा सकता कि किस तारीख को दिखाया गया है (इस प्रकार 1 9 34 दिखा रहा है ..)

इसके बजाय मैं केवल डेट ऑब्जेक्ट के साथ डेटपेकर के साथ निपटने पर ध्यान केंद्रित करता था।

नई परियोजना जोड़ना:

  • var दिनांक एमडी-डेट पिक्चर से दिनांक ऑब्जेक्ट फॉर्म में इनपुट है। तो मैं इसे युग में परिवर्तित कर दूंगा ताकि इसे अन्य मूल्यों की तरह फायरबेज में बचाएं।

    var date = new Date(project.deadline);
    project.deadline = date.getTime();

परियोजना को अद्यतन करना:

  • वर्तमान प्रोजेक्ट को vm.project में निर्दिष्ट करना यह मुझे vm.project.deadline तक पहुंच देता है जिसमें मीनल काल में जोड़ा गया समय सीमा शामिल है युग समय से तारीख ऑब्जेक्ट से समय सीमा को परिवर्तित करें। यह मुझे मेरी पसंद की तारीख बदलने की इजाजत देता है। उपयोगकर्ता अद्यतन को क्लिक करने के बाद, नई दिनांक ऑब्जेक्ट को पहले युग में परिवर्तित किया जाता है और फिर मैं अन्य डेटा की तरह फायरबेज में भी जोड़ सकता हूं।

    var vm = this;
    vm.project = {};
    vm.project = currentProject;
    
    vm.project.deadline = new Date(vm.project.deadline);
    
    vm.update = function() {
        var date = new Date(vm.project.deadline);
        vm.project.deadline = date.getTime();
        ...

मुझे युग के समय की जरूरत है इसलिए रूपांतरण। अगर किसी को युग की ज़रूरत नहीं है (या अन्य दिनांक फॉर्म) तो मैं सोचता हूं कि तिथि वस्तु अपरिवर्तित होने से कोई समस्या नहीं होनी चाहिए।