2013-07-19 6 views
13

मुझे अपने रूटप्रोवाइडर पर काम करने का संकल्प मिला है, लेकिन मैं सिर्फ वादा वापस कर देता हूं इसलिए मुझे नहीं पता कि इसकी सफलता या विफलता क्या है। यह मैं क्याकोणीयजेएस: रूटप्रोवाइडर में हल करें - सफलता/विफलता का पता लगाना?

.when('/items', { 
    templateUrl: 'views/items.html', 
    controller: 'ItemsCtrl', 
    resolve: { 
     resolvedData: function(Restangular) { 
      return Restangular.one('Items').get(); 
     } 
    } 
}) 

अब इस काम लेकिन मैं कैसे सफलता या विफलता का पता लगाने ... मैं इस संकल्प को विधि में प्रवेश कर सकता है करता है, लेकिन मैं सफलता और विफलता में क्या वापसी होगी ... याद रखना है मुझे आइटम को मेरे नियंत्रक में इंजेक्शन देने की आवश्यकता है।

.when('/items', { 
    templateUrl: 'views/items.html', 
    controller: 'ItemsCtrl', 
    resolve: { 
     resolvedData: function(Restangular) { 
      Restangular.one('Items').get().then(function(data) { 
       // success 
      }, function() { 
       // failure 
      }); 
     } 
    } 
}) 

मैंने यहां एक उदाहरण देखा था, लेकिन अगर मुझे इसकी आवश्यकता है और इसका उपयोग कैसे किया जाए तो मैं उलझन में हूं?

AngularJS - rejected $http promise with $routeProvider:resolve

यह एक मैनुअल वादा लौटने जा रहा है।

resolve: { 
    response: ['Warranty' 
     '$q', 
     function(Warranty, $q) { 
      var dfd = $q.defer(); 
      Warranty.sendRequest().then(function(result) { 
       dfd.resolve({ 
        success: true, 
        result: result 
       }); 
      }, function(error) { 
       dfd.resolve({ 
        success: false, 
        reason: error 
       }); 
      }); 
      return dfd.promise; 
     } 
    ] 
} 

मैं वास्तव में किसी भी मदद की सराहना करता हूं।

मैं वास्तव में क्या करना चाहता हूं मेरे नियंत्रक में संकुचित हो गया है नियंत्रक में इंजेक्शन, अगर यह विफल हो जाता है तो मैं नियंत्रक में विफलता तक पहुंच भी लेना चाहता हूं ताकि मैं उपयोगकर्ता को प्रदर्शित कर सकूं कि यह नहीं था किसी मुद्दे के कारण प्रस्तुत करना संभव नहीं है।

उत्तर

10

तुम बस then विधि के रिटर्न मान लौट सकते हैं:

resolve: { 
    resolvedData: function(Restangular){ 
     return Restangular.one('Items').get().then(function (data) { 
      ... 
      return successData; // resolvedData will be resolved with the successData 
      }, function() { 
      ... 
      return failureData; // resolvedData will be resolved with the failureData 
      }); 
    } 
} 

then विधि doc:

इस विधि एक नया वादा जिनमें से वापसी मान के माध्यम से हल किया या अस्वीकार कर दिया है रिटर्न सफलता कॉलबैक या त्रुटि कॉलबैक।

+1

आह बहुत अच्छा है, और मेरे नियंत्रक में मैं कैसे पहचानूंगा कि मैं जिस इंजेक्शन को इंजेक्शन कर रहा हूं वह सफलता या विफलता है ?? – Martin

+2

किसी ऑब्जेक्ट को वापस करें जैसे {सफलता: सत्य, डेटा: ...} –

2

यदि समाधान फ़ंक्शन विफल हो जाता है, तो आप शायद उपयोगकर्ता को तदनुसार कुछ (जैसे एक त्रुटि संदेश) प्रदर्शित करना चाहते हैं। आपके संकल्प फ़ंक्शन को एक वादा वापस करने के लिए बेहतर होगा (then के बिना) और आंतरिक ईवेंट $routeChangeError का उपयोग करें।

myApp.run(['$rootScope',function($rootScope) { 
    $rootScope.$on('$routeChangeError', function() { 
    // what you want to do if an error occurs 
    // ex: $rootScope.displayErrorMessage = true 
    }); 

])

यह भी सामान्य त्रुटि से निपटने के लिए आसान हो जाएगा (नेटवर्क त्रुटि/सर्वर डाउन आदि की तरह)।

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