2015-07-22 5 views
7

मेरे पास निम्न कोड (नीचे) है, वे मेरे लिए पूरी तरह से काम करते हैं और मुझे कम से कम क्या चाहिए। लेकिन मैं इस बारे में संदेह करता हूं, मुझे यह महसूस हो रहा है कि यह सच होना बहुत अच्छा है। चूंकि मैं $http के एसिंक व्यवहार के साथ संघर्ष कर रहा हूं, इसने मुझे नियंत्रक पर वैश्विक स्तर पर $http अनुरोध से प्रतिक्रिया ऑब्जेक्ट का उपयोग करने में बहुत मदद की।

मैं सिर्फ अगर इसकी सही तरीके से या कम से कम एक स्वीकार्य एक या मैं पहले मैं अपने प्रोजेक्ट के साथ आगे बढ़ने $httpAngularJS' Documentation पर एक तरह मिल का उपयोग करने का परंपरागत तरीके से उपयोग करना चाहिए जानना चाहते हैं। उत्तर मुझे बहुत मदद करेंगे। धन्यवाद।

$ stateProvider

$stateProvider 
    .state('test', { 
     url: '/test', 
     templateUrl: 'partial.template.html', 
     resolve : { 
      foo : function($http) { 
       return $http({ 
        method: 'GET', 
        url: '/api/something' 
       }); 
      }, 
      bar : function($http) { 
       return $http({ 
        method: 'GET', 
        url: '/api/something' 
       }); 
      }, 
     }, 
     controller: 'mainController', 
    }) 

नियंत्रक

.controller('mainController',['$scope', 'foo', 'bar', function($scope, foo, bar){ 
    $scope.fooObj = foo; 
    $scope.barObj = bar; 
}]) 
+2

मुझे ठीक लग रहा है। यही 'हल' के लिए किया गया था। आपकी चिंता क्या है? – Thomas

+0

राउटर डॉक्स – charlietfl

+0

@ थॉमस में इसके उदाहरण भी हैं, मैं सोच रहा हूं कि शायद यह सबसे अच्छा तरीका नहीं है और मैं इस दृष्टिकोण पर निवेश करने में समय बिताना नहीं चाहता हूं और फिर भविष्य में यह मेरी दुनिया में टूट सकता है (जबरदस्त हंसी)। यदि आप कहते हैं कि यह ठीक है तो मैं आपको विश्वास करता हूं। धन्यवाद दोस्त। :) – CENT1PEDE

उत्तर

7

मुझे लगता है कि यह शायद एक ui रूटर संकल्प के लिए सबसे अच्छा USECASE है।

वैसे भी मैं अपनी http कॉल को सेवाओं में लपेटना पसंद करता हूं और सीधे $ http का उपयोग करने के बजाय इस सेवाओं को संकल्प में कॉल करना चाहता हूं।

यह कुछ ऐसा दिखाई देगा:

app.service('FooService',function($http){ 
    var service={}; 
    service.getFoo = function(){ 
     return $http({ 
       method: 'GET', 
       url: '/api/something' 
      }); 
    } 
    return service; 
}); 

कि के लिए धन्यवाद आप सभी अपने आवेदन के आसपास इस विधि कॉल कर सकते हैं (और एक ही समय में यह केंद्रीकृत)।

नियंत्रक में:

app.controller('MyController', function($scope, FooService) { 
    $scope.controllerName = "MyController"; 
    FooService.getFoo().success(function(foo){ 
     $scope.foo = foo 
    }); 
}); 

एक संकल्प में:

$stateProvider 
.state('test', { 
    url: '/test', 
    templateUrl: 'partial.template.html', 
    resolve : { 
     foo : function(FooService) { 
      return FooService.getFoo(); 
     }, 
    }, 
    controller: 'MyController', 
}) 

इस दृष्टिकोण के साथ पर जाओ, तुम एक अच्छी राह पर हैं।

आशा है कि इससे मदद मिलेगी।

संपादित करें: अभ्यास विधियों के ठोस उदाहरण को जोड़ने के लिए plunker बनाया गया।

+0

उह वास्तव में मुझे इस दृष्टिकोण साथी पर एक छोटी सी समस्या मिली। ऐसा लगता है कि संकल्प टेम्पलेट लोड करने से रोक रहा है? यह अजीब है लेकिन कंसोल पर कोई त्रुटि नहीं है। – CENT1PEDE

+0

हाँ वास्तव में टेम्पलेट तब तक लोड नहीं होगा जब तक संकल्प में वादा हल नहीं हो जाता है। यदि आप यह नहीं चाहते हैं, तो बस सेवा के साथ रहें और "नियंत्रक" उदाहरण का उपयोग करें। आप कुछ लोडर जोड़ सकते हैं और यह एक आकर्षण की तरह काम करेगा। – Okazari

+0

यह नौसिखिया लग सकता है लेकिन मैं वादा को कैसे हल करूं? – CENT1PEDE

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