2013-10-29 12 views
22

मेरे पास ng-repeat तत्व है जो $http.get() परिणाम के माध्यम से लूप होगा।कोणीय जेएस तिथि फ़िल्टर काम नहीं कर रहा

<tr ng-repeat="blog in posts"> 
    <td style="text-align:center">{{ $index+1 }}</td> 
    <td>{{ blog.title }}</td> 
    <td> 
     {{ blog.author.name }} 
    </td> 
    <td> 
     {{ blog.created_at | date:'MMM-dd-yyyy' }} 
    </td> 
</tr> 

मैं MySQL डेटाबेस तालिका में timestamp रूप created_at है। और मैं angular.js v1.0.7 का उपयोग कर रहा हूं।

मुझे डीबी तालिका से एक ही आउटपुट मिल रहा है और डेट फ़िल्टर काम नहीं कर रहा है। इसे कैसे हल किया जा सकता है?

मेरे ajax कॉल,

$http({method: 'GET', url: 'http://localhost/app/blogs'}). 
success(function(data, status, headers, config) { 
    $scope.posts = data.posts; 
}). 
error(function(data, status, headers, config) { 
    $scope.posts = []; 
}); 

उत्तर

14

में मदद मिलेगी, यह रिटर्न laravel वाक्पटु से स्ट्रिंग के रूप में created_at

यह इस जावास्क्रिप्ट का उपयोग कर हल किया जा सकता,

new Date("date string here".replace(/-/g,"/")); 

तो कोड,

$http({method: 'GET', url: 'http://localhost/app/blogs'}). 
success(function(data, status, headers, config) { 
    angular.forEach(data.posts, function(value, key){ 
    data.posts[key].created_at = new Date(data.posts[key].created_at.replace(/-/g,"/")); 
    } 
    $scope.posts = data.posts; 
}). 
error(function(data, status, headers, config) { 
    $scope.posts = []; 
}); 
+0

क्यों नहीं कोणीय foreach – Vignesh

+1

@Vignesh हाँ, मुझे लगता है कि उपयोग करना चाहिए। – devo

39

तारीख फिल्टर प्रकार जावास्क्रिप्ट दिनांक के होने की जरूरत है के लिए पारित कर दिया।

क्या आपने यह जांच की है कि फ़िल्टर के बिना blog.created_at मूल्य प्रदर्शित किया गया है?

आपने कहा कि आपकी समर्थित सेवा तिथि का प्रतिनिधित्व करने वाली स्ट्रिंग लौट रही है। आप दो तरह से इस को हल कर सकते हैं:

  1. अपने सर्वर-साइड कोड एक json तारीख वस्तु
    • जांच लौट कैसे सर्वर साइड कोड json कि यह रिटर्न
  2. अपनी खुद लिखें क्रमानुसार बनाओ फिल्टर जो स्ट्रिंग तारीख को स्वीकार करता है और आवश्यक प्रारूप में तारीख रिटर्न
    • नोट: आप अपने खुद के फिल्टर में कोणीय फिल्टर कॉल कर सकते हैं

आप इस प्रकार अपने स्वयं के फिल्टर लिख सकते हैं:

app.filter('myDateFormat', function myDateFormat($filter){ 
    return function(text){ 
    var tempdate= new Date(text.replace(/-/g,"/")); 
    return $filter('date')(tempdate, "MMM-dd-yyyy"); 
    } 
}); 

और अपने खाके में इस तरह इसका इस्तेमाल:

<td> 
    {{ blog.created_at | myDateFormat }} 
</td> 

बल्कि लौटे सरणी के माध्यम से पाशन और फिर लागू करने से फ़िल्टर

+0

मैं इस पर ध्यान दिया है:

app.filter('stringToDate',function ($filter){ return function (ele,dateFormat){ return $filter('date')(new Date(ele),dateFormat); } }) 

उसके बाद निम्न कोड के रूप में किसी भी टेम्पलेट में इस फिल्टर का उपयोग कुछ जवाबों में। लेकिन मैं इसे अपने '' http 'कॉल में कैसे प्राप्त कर सकता हूं? दोनों बार मैं 'हो रही है' 2013-10-08 00: 00: 00'' – devo

+0

धन्यवाद, मैं का वर्णन किया है कि मैं टाइमस्टैम्प प्रारूप में मेरी तिथि होती है, और मैं अपने टुकड़ा के साथ स्पष्ट कोड की उम्मीद है। तो इसे बदलने के लिए मुझे कुछ रेगेक्स का उपयोग करना होगा। मैंने अपना अंतिम कामकाजी परिणाम पोस्ट किया है। उचित स्पष्टीकरण के लिए – devo

+0

+1। – devo

6

आप new Date(/*...*/) 0 से प्राप्त किए गए डेटा के आधार पर बना सकते हैं, जैसे:

$scope.date = new Date('2013', '10', '28'); // for example 

फिर भी आप Plunker में इस डेमो देख सकते हैं।

आशा है कि यह सर्वर साइड से आप

+0

का उपयोग क्यों करते हैं धन्यवाद, मैंने वर्णन किया है कि मेरे पास टाइमस्टैम्प प्रारूप में मेरी तिथि है। तो इसे बदलने के लिए मुझे कुछ रेगेक्स का उपयोग करना होगा। मैंने अपना अंतिम कामकाजी परिणाम पोस्ट किया है। स्पष्टीकरण के लिए – devo

+0

+1, यहां मेरा उचित समाधान पोस्ट किया गया। – devo

2

रिकॉर्ड तिथि चर 'नए' का उपयोग करने के लिए याद करते हैं, जैसा कि नीचे कीवर्ड:

var time = new Date(); 

अन्यथा यदि आप इसे लिखते हैं:

var time = Date(); 

दिनांक को फ़ंक्शन के रूप में जाना जाता है और डेट टाइम स्ट्रिंग वापस कर दी जाएगी जिसे फ़िल्टर में इनपुट के रूप में उपयोग नहीं किया जा सकता है।

6

आप निम्नलिखित कोड के रूप में है, जो तारीख करने के लिए स्ट्रिंग में कनवर्ट एक कस्टम फ़िल्टर जोड़ सकते हैं:

<div ng-repeat = "a in data">{{a.created_at |stringToDate:"medium"}}</div> 
संबंधित मुद्दे