2012-10-27 16 views
37

मैं कोणीय और फ्लोट के लिए नया हूं, लेकिन मुझे jquery और जावास्क्रिप्ट के साथ अनुभव हुआ है। फ्लोर एक JQuery प्लगइन है, क्योंकि मैं कोणीय डेटा मॉडल में फ़्लोट चार्ट को बाध्य करने के बारे में थोड़ा उलझन में हूं। मैंने चारों ओर खोज की है, लेकिन एक उदाहरण खोजने में सक्षम नहीं है।AngularJS के साथ फ़्लोट को एकीकृत करने के लिए कैसे?

मुझे हाईचार्ट्स, google-charts, या किसी अन्य चार्टिंग समाधान का उपयोग करने में भी खुशी होगी।

उत्तर

67

, निर्देशों जाने का रास्ता है।

डाटा नियंत्रक

App.controller('Ctrl', function($scope) { 
    $scope.data = [[[0, 1], [1, 5], [2, 2]]]; 
}); 

में रखा जा सकता और अगर आप एक निर्देश के माध्यम से मॉडल आप जो कोणीय संकलन कर सकते हैं से

<chart ng-model='data'></chart> 

डेटा प्राप्त करना चाहते निर्दिष्ट करने एक कस्टम HTML टैग 1 बना सकते हैं

App.directive('chart', function() { 
    return { 
     restrict: 'E', 
     link: function(scope, elem, attrs) { 
      var data = scope[attrs.ngModel]; 
      $.plot(elem, data, {}); 
      elem.show(); 
     } 
    }; 
}); 

Example here

यह प्रक्रिया अधिकांश प्लगइन के लिए समान है जो DOM को संशोधित करती हैं।

- * -

इसके अलावा, आप चार्ट के अंतर्निहित डेटा में परिवर्तन के लिए देख सकते हैं और यह पुनः बनाने सकता है, इसलिए इस तरह से आप अपने नियंत्रक से $ http सेवा के माध्यम से डेटा हड़पने और स्वचालित रूप से दृश्य को अपडेट कर सकते हैं। यह निर्देश परिभाषा वस्तु में जोड़ने समारोह को संशोधित करने

var chart = null, 
     opts = { }; 

    scope.$watch(attrs.ngModel, function(v){ 
     if(!chart){ 
      chart = $.plot(elem, v , opts); 
      elem.show(); 
     }else{ 
      chart.setData(v); 
      chart.setupGrid(); 
      chart.draw(); 
     } 
    }); 

सूचना प्राप्त करने के लिए निर्देश के भीतर Flot के एपीआई का उपयोग हम क्या चाहते हैं के द्वारा प्राप्त किया जा सकता है।

Here the full example


1 एक विशेषता भी हो सकता है।

+2

यह बहुत जानकारीपूर्ण था। मुझे एंगुलर के एपीआई के बारे में कुछ और सीखना था ताकि इसे दो अलग जेएस फाइलों में काम कर सकें (निर्देश और नियंत्रक को अलग रखने के लिए)। मुझे एक समस्या मिली, जो कि यदि आप 'डेटा' देखते हैं, तो आपने अपना निर्देश मॉडल के नाम पर बांध लिया है। एक बेहतर समाधान 'स्कोप। $ घड़ी (attrs.ngModel', ....) का उपयोग करना है। मैंने यहां बेवकूफ अपडेट किया है: http://jsfiddle.net/TDwGF/3/ – JBCP

+1

नए कोणीय उपयोगकर्ताओं के लिए: इस निर्देश का उपयोग एक विशेषता के रूप में करने के लिए, आपको "प्रतिबंधित: 'E'" से " प्रतिबंधित: 'ईए' '। ई 'एलिमेंट' है, ए 'विशेषता' है। – JBCP

+1

मैं पहले डेटा में var data = scope। $ Eval (attrs.ngModel) का उपयोग करने का सुझाव देता हूं क्योंकि तब आपका एनजी-मॉडल "charts.exchangerates.eur2usd" हो सकता है। दूसरी पहेली में मैं डेटा ऑब्जेक्ट के अंदर परिवर्तन देखने के लिए एक गहरी घड़ी का उपयोग करूंगा। यहां एक पहेली है जो एमआईएमई-गिटब में परिवर्तन के कारण टूटा नहीं गया है: http://jsfiddle.net/dWDDp/ – maklemenz

1

AngularJS साथ jQuery प्लगइन का उपयोग करने के लिए, आप आप angularUI निर्देशों के स्रोत कोड को पढ़ कर jQuery प्लगइन्स निर्देशों के कुछ exemples पा सकते हैं उन्हें निर्देशों में रैप करने के लिए है, चूंकि चार्टिंग भारी डोम हेरफेर शामिल https://github.com/angular-ui/angular-ui/tree/master/modules/directives

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