2011-07-01 21 views

उत्तर

7

जबकि मुझे angular.js का कोई अनुभव नहीं है, तो Google Buzz example को देखते हुए ऐसा लगता है कि JSON- प्रदान करने वाले संसाधनों से निपटने का एक तरीका है। चूंकि यह वास्तव में कॉच डीबी है, मुझे नहीं लगता कि इसमें शामिल होने के लिए node.js की आवश्यकता है।

सभी कॉच डीबी कार्यक्षमता को HTTP अनुरोधों के माध्यम से एक्सेस किया जा सकता है, इसलिए अगर यह AJAX कॉल करके आवश्यक हो तो इसे ठीक से फिट करना चाहिए। angular.service.$resource उचित उम्मीदवार होने लगते हैं।

3

अश्विन, यह पूछने के लिए धन्यवाद। मैं भी इस मुद्दे के साथ संघर्ष करता हूं।

मैं अभी तक पता लगा नहीं किया है, क्योंकि यह इस तरह एक पूर्ण स्थानीय होस्ट URL का उपयोग करता है कि कैसे, $ संसाधन का उपयोग करने के AngularJS से स्थानीय CouchDB कॉल करने के लिए:

http://localhost:5984/<dbname>/_all_docs 

और AngularJS डॉक्स और उदाहरण के सभी स्थानीय दिखाने pathnames। वे वास्तव में एक अलग वेब सेवा तक पहुंचने के बारे में नहीं बताते हैं, या कम से कम मुझे कोई स्पष्टीकरण नहीं मिला है जो मदद करता है :)

यहां jQuery का उपयोग करने का एक तरीका है जो मुझे समझने में आसान था। मैंने इसे couch.js नामक फ़ाइल में रखा - हमारे क्रिटर्स (कुत्तों, बिल्लियों, आदि) के कोच डीबी से कनेक्ट करने के लिए। वास्तविक मॉड्यूल ("एप्लिकेशन") एप्लिकेशन में कहीं परिभाषित किया गया है, तो मैं बस "एप्लिकेशन" नामक एक चर में डाल दिया और इतने की तरह एक काउच नियंत्रक कहा:

(function() { 
    'use strict'; 
    var app = angular.module('app'); 
    app.controller('CouchCtrl', function ($scope,$http,$resource) { 
     var all_critters = 'http://localhost:5984/critters/_all_docs?callback=?'; 
     $.getJSON(all_critters, function(json) { 
      $scope.$apply(function(){ 
       $scope.all_critters = json; 
      }); 
     }); 
     $scope.getAllCritters = function() { 
      return $scope.all_critters; 
     }; 
    }); 
}()); 

मैं जोड़ा कॉलबैक =? जब मैंने स्थानीय रूप से काम किया, तो JSONP के लिए स्थानीयहोस्ट सुरक्षा समस्याओं से बचने के लिए, इसलिए मैंने JSONP = कोचडीबी प्राथमिकताओं में सत्य सेट किया।

एक html पृष्ठ में, बस में crittersDB डालकर इस कॉल के परिणाम को देखने के लिए एक बाध्यकारी:

<ul ng-controller="CouchCtrl"> 
    <h5>Critters</h5> 
    <p>There are currently {{all_critters.total_rows}} critters.</p> 
    <li ng-repeat="(key,value) in all_critters"> 
     {{key}} - {{value}} 
    </li> 
</ul> 

किसी को भी खींच के इस jQUery.getJSON तरह से दोहराने के लिए कुछ वास्तविक AngularJS $ संसाधन कोड पोस्ट कर सकता है कॉच डीबी से डेटा को एंगुलरजेएस ऐप में, मैं इसकी सराहना करता हूं।

1

चाल यह है कि आपके पृष्ठ में couchdb को प्रश्न शामिल हैं, उसी पते और बंदरगाह से ही कॉचडब के रूप में कार्य किया जाना चाहिए। यह आपके एचटीएमएल को couchdb द्वारा सेवा करके, या एक प्रॉक्सी स्थापित करके पूरा किया जा सकता है जो आपके वेब सर्वर दोनों के लिए छतरी के रूप में काम करेगा एचटीएमएल और couchdb।

18

मैंने कॉर्नरकच नामक एक कोणीय जेएस मॉड्यूल बनाया है जो एंगुलरजेएस $ संसाधन के दृष्टिकोण पर विशेष रूप से कॉच डीबी के लिए इसे तैयार करके बेहतर बनाता है। यह AngularJS में $ http सेवा पर आधारित है। मैं इस तरह से साफ साफ जावास्क्रिप्ट कोड के साथ समाप्त हुआ, खासकर ऐप विशिष्ट AngularJS नियंत्रक में।

  • एक CouchDB attachement से लोड एचटीएमएल एप्लिकेशन सीधे (CouchApp दृष्टिकोण) एक

  • उपयोग:

    CornerCouch AngularJS Module

    कॉल करना सीधे रूप में मैं जानता हूँ कि तीन विकल्प छोड़ देता है, जहाँ तक जेटी प्रोजेक्ट (जावा ऐप स्टैक) में शामिल पारदर्शी प्रॉक्सी

  • जीईटी ओ के माध्यम से एक्सेस केवल तभी, लेकिन JSONP का उपयोग कर, CouchDB सर्वर

बाकी सब कुछ पर उसे सक्षम क्रॉस-साइट स्क्रिप्टिंग प्रतिबंधों से नहीं मिलता है के बाद।

+0

हाल ही में यह काम करना बंद कर दिया है कि AngularJS ने 1.6+ में $ http.success() और $ http.error के लिए समर्थन हटा दिया है। मैंने एक मुद्दा दायर किया है। –

0

मैंने अंगुलरजेएस वेबसाइट पर मोंगोलैब के बजाय कॉच डीबी का उपयोग करने के लिए उदाहरण को संशोधित किया है। http://jsfiddle.net/WarwickGrigg/dCCQF/ और जीथब रिपोजिटरी यहां https://github.com/telanova/angularjs-couchdb देखें। मैं एक कोणीय नौसिखिया हूं: मुझे अपने सिर को $ संसाधन के दौर में लाने का संघर्ष मिला, लेकिन ऐसा लगता है कि यह अच्छी तरह से काम करता है।

$scope.projects = ProjectCouch.get({q:'_all_docs', include_docs: 'true', limit: 10}); 

angular.module('CouchDB', ['ngResource']). 
    factory('ProjectCouch', function($resource) { 
     var ProjectCouch = $resource(':protocol//:server/:db/:q/:r/:s/:t', 
            {protocol: 'http:', server: 'localhost:5984', db:'projects'}, {update: {method:'PUT'} 
          } 
    ); 

    ProjectCouch.prototype.update = function(cb) { 
    return ProjectCouch.update({q: this._id}, 
     this, cb); 
    }; 

    ProjectCouch.prototype.destroy = function(cb) { 
     return ProjectCouch.remove({q: this._id, rev: this._rev}, cb); 
    }; 

    return ProjectCouch; 
}); 

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

  • कोई संबंधित समस्या नहीं^_^