2014-06-05 6 views
5

मेरे पास एक HTTP संसाधन है जो डेटाबेस से शीर्ष 10 इकाइयों की JSON सूची देता है। मैं इसे इस तरह से कॉल करता हूं:

var filter= "john"; 
var myApp = angular.module('myApp', []); 
myApp.controller('SearchController', ['$scope','$http', function ($scope, $http) { 
    $http.get('/api/Entity/Find/' + filter). //Get entities filtered 
     success(function (data, status, headers, config) { 
      $scope.entities = data; 
     }). 
     error(function() { 
     }); 
    }]); 

यह काम करता है!

लेकिन ... क्वेरी बदलने के लिए मैं filter चर बदल सकता हूं? क्या मुझे इसे पूरा करने के लिए पूरे नियंत्रक को फिर से लिखना चाहिए?

अद्यतन

मेरे प्रश्न में स्पष्टता की कमी के लिए खेद है। जब मैंने यह पूछा तो मैं AngularJS के कुछ भी नहीं कर सका।

मेरा मूल उद्देश्य वैरिएबल $http इंजेक्शन प्राप्त करना था, इसके लिए नियंत्रक बनाने पर भरोसा किए बिना।

सभी के लिए धन्यवाद।

+2

वास्तव में यह स्पष्ट नहीं है कि आप आम तौर पर बोलने की कोशिश कर रहे हैं कि आप अपने सर्वर के साथ संचार करने के लिए एक सेवा का उपयोग करना चाहते हैं। उस ने कहा कि यह स्पष्ट नहीं है कि आप क्या करना चाहते हैं। – shaunhusain

+0

मुझे लगता है कि आपके पास आरामदायक पृष्ठ है जहां आप अपने पृष्ठ में कार्रवाइयों के आधार पर फ़िल्टर जोड़ सकते हैं, आप फिल्टर मान को संशोधित करने के लिए एक फ़ंक्शन लिख सकते हैं और इसलिए यूआरएल लाने के लिए बदल सकते हैं। स्पष्ट उत्तर प्राप्त करने के लिए पूर्ण परिदृश्य समझाएं। हो सकता है कि एक jsfiddle या plunker – Skeptor

उत्तर

14

एक संभावित बेहतर विधि

डेनिस द्वारा दी गई विधि; हालांकि, कोणीय बूटस्ट्रैप होने से पहले बुलाया जाता है तो यह काम नहीं करता है। साथ ही, ऐसा लगता है कि डेरेक को डेनिस की विधि में कोई त्रुटि है क्योंकि उसके पास jquery नहीं है।

के रूप में यह है कि समस्या नहीं है समाधान है कि Exlord उल्लेख बेहतर है, और भी बहुत कुछ उचित है:

$http = angular.injector(["ng"]).get("$http"); 

व्याख्या:

object that can be used for retrieving services as well as for dependency injection

:

कोणीय इंजेक्टर एक है

https://docs.angularjs.org/api/ng/function/angular.injector

फ़ंक्शन angular.injector मॉड्यूल को पैरामीटर के रूप में लेता है और इंजेक्टर का एक उदाहरण देता है।

तो इस मामले में आप एनजी मॉड्यूल (कोणीय) के लिए इंजेक्टर पुनर्प्राप्त करते हैं, और फिर सेवा $ http पुनर्प्राप्त करते हैं।

पार्टी के लिए देर: मृत प्रश्न को पुनर्जीवित करने के लिए मेरी माफ़ी, लेकिन मुझे लगता है कि मेरा उत्तर दूसरों के संदर्भ में उपयोगी है।

नोट: एक बात जब इस तरह इंजेक्टर का उपयोग कर ध्यान में रखने के अपने खुद के निष्कर्ष में ऐसा लगता है कि क्या आप वाकई इंजेक्षन जो कि तुम क्या कर रहे हैं "हो रही है" की आवश्यकता होगी में मॉड्यूल को शामिल करना है।उदाहरण के लिए:

angular.injector(['ng', 'ngCordova']).get('$cordovaFileTransfer') 
+1

मुझे अपने मूल टाइपो से प्यार है जब मैंने कहा "क्योंकि उसके पास जावास्क्रिप्ट नहीं है"। मुझे लगता है कि डेरेक को मेरी विधि के साथ भी एक त्रुटि होनी चाहिए, अगर उसके पास जावास्क्रिप्ट नहीं था;) तब से मैंने "jquery नहीं है" को सही किया है – csga5000

+1

मुझे प्यार है कि आप कैसे एक महान उत्तर के लिए क्षमा चाहते हैं :) +1 – Mzn

7

अपने प्रश्न का संबंध "... बाहर नियंत्रक से $ http.get कॉल" आप कर सकते हैं निम्नलिखित: angular $injector docs:

... ANYWHERE IN YOUR CODE 

var $http = angular.element('html').injector().get('$http'); 
$http.get(...).success(...); 

ANYWHERE IN YOUR CODE ... 

कोणीय से आधिकारिक डॉक्स देखें get(name); विधि Returns an instance of the service.

+0

Uncaught TypeError: अपरिभाषित – Exlord

+2

की संपत्ति 'प्राप्त' नहीं पढ़ी जा सकती है, यह केवल कोणीय ऐप बूटस्ट्रैप होने के बाद ही काम करता है और – Exlord

+4

से पहले यह सही तरीका नहीं है लेकिन यह 'var $ http = angular.injector (["एनजी"])। ("$ http") प्राप्त करें; ' – Exlord

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