2013-08-17 13 views
13

मुझे यह पता लगाने की कोशिश कर रहे समय का एक बिल्ली है कि मुझे कोणीय में अज्ञात प्रदाता त्रुटि क्यों मिल रही है। मैंने इस विषय पर हर दूसरे प्रश्न की जांच की है और अधिकांश निर्भरता इंजेक्शन में एक त्रुटि का सुझाव देते हैं। हालांकि, ऐसा लगता है कि मैं कुछ भी इंजेक्ट करना भूल रहा हूं। मैं संकल्प संपत्ति को this post by Misko जैसे काम करने की कोशिश कर रहा हूं। मैं इसे हल करने के बाद कर्मचारी डेटा को लॉग आउट करने में सक्षम हूं, लेकिन फिर मुझे अज्ञात प्रदाता त्रुटि मिलती है, जो पृष्ठ को डेटा पर दिखाए जाने से रोकती है।त्रुटि: अज्ञात प्रदाता: कर्मचारी प्रदाता <- कर्मचारी

यहाँ मेरी रूटर है:

"use strict"; 

    var app = angular.module('app',[ 
     'employeeServices' 
    ]); 

    app.config(appRouter); 

    function appRouter ($routeProvider) { 
     $routeProvider 
     .when('/employees/:account_id', { 
      controller: 'EmployeeCtrl', 
      templateUrl: 'view/employee/view.html', 
      resolve: employeeCtrl.resolve 
     }) 

     .otherwise({ redirectTo: '/' }); 
    } 

यहाँ है मेरी नियंत्रक

var employeeCtrl = app.controller('EmployeeCtrl', [ 
     '$scope', 
     'employees', 
     function ($scope, employees) { 
     $scope.employee = employees; 
     console.log($scope.employee); 
     } 
    ]); 

    employeeCtrl.resolve = { 
     employees: function (Employee, $q, $route) { 
     var deferred = $q.defer(); 
     console.log("current params: ", $route.current.params.account_id); 
     Employee.getOne({ id: $route.current.params.account_id }, function (successData) { 
      deferred.resolve(successData); 
     }, function (errorData) { 
      deferred.reject(errorData); 
     }); 
     return deferred.promise; 
     } 
    }; 

और मेरे कारखाने:

angular.module('employeeServices', ['ngResource']) 
     .factory('Employee', ['$resource', function ($resource) { 
     return $resource('/employees/:id/json', 
      { 
      id: '@account_id' 
      }, 
      { 
      'save': { 
       method: 'POST', 
       isArray: false 
      }, 
      'update': { 
       method: 'PUT', 
       params: { 
       id: '@account_id' 
       } 
      }, 
      'remove': { 
       method: 'DELETE', 
       params: { 
       id: '@account_id' 
       } 
      }, 
      'getOne': { 
       method: 'GET', 
       params: { 
       id: '@account_id' 
       }, 
       isArray: false 
      }, 
      'query': { 
       method: 'GET', 
       params: { 
       id: '@account_id' 
       }, 
       isArray: true 
      } 
      } 
     ); 
     }]); 

किसी भी सुझाव की बहुत सराहना की जाएगी!

+0

अपने नियंत्रक में है कि संकल्प समारोह क्या है? मुझे समझ में नहीं आता है। –

उत्तर

46

को बदलें तो समस्या यह है कि मैं अपने के आंशिक दृश्य के अंदर एनजी नियंत्रक के माध्यम से EmployeeCtrl नियंत्रक की स्थापना की गई थी, इसलिए की तरह था:

<div class="viewPage" ng-controller="EmployeeCtrl"> 

जब संकल्प का उपयोग कर हालांकि, रनटाइम पर उपलब्ध होने के लिए नियंत्रक सेट अप राउटर के माध्यम से किया जाना चाहिए। मैं ng-controller="EmployeeCtrl ...

<div class="viewPage"> 

... और Presto, कुछ भी नहीं की तरह कभी हुआ हटा दिया।

मैं ध्यान दें कि मैं मदद तरह से, रोगी लोगों से अधिक the AngularJS IRC channel पर प्राप्त है ...

+1

क्योंकि मैं ngController निर्देश के साथ नियंत्रक सेट करता हूं और मार्गों में मुझे अज्ञात प्रदाता त्रुटि संदेश मिलता है। मैं एचटीएमएल कोड से ngController को मिटाना भूल गया। धन्यवाद, syou मेरा दिन – tschiela

+0

बचाया आप बिल्कुल प्रतिभाशाली और जीवन बचतकर्ता हैं! – unruledboy

+0

2016, और यह अभी भी बहुत अच्छा है। मैंने एक घंटे से अधिक समय व्यतीत किया है। ओह नहीं! आपको बहुत - बहुत धन्यवाद! – Rexford

0

जब से तुम Employee बुलाया कारखाने में परिभाषित किया गया है, तो आप इस मॉड्यूल का उल्लेख करने के लिए जब आप यह नियंत्रक को इंजेक्षन सटीक नाम का उपयोग करना चाहिए।

var employeeCtrl = app.controller('EmployeeCtrl', [ 
     '$scope', 
     'employees', 

var employeeCtrl = app.controller('EmployeeCtrl', [ 
     '$scope', 
     'Employee', 
+0

मैंने सोचा कि यह मुद्दा भी पहले था, लेकिन ऐसा लगता है कि 'कर्मचारी' कारखाने को नियंत्रक में 'समाधान' ऑब्जेक्ट में परिभाषित 'कर्मचारी' फ़ंक्शन में इंजेक्शन दिया जा रहा है। क्या इसका कोई मतलब है? –

+0

@ माइकलबेनफोर्ड मूल कोड में दूसरे 'कर्मचारी 'स्थानीय चर है, आप इसे मॉड्यूल से मेल खाने तक इसे किसी भी चीज़ का नाम बदल सकते हैं। स्थानीय चर कोई फर्क नहीं पड़ता, आप 'app.controller ('कर्मचारी Ctrl', ['$ scope', 'कर्मचारी', फ़ंक्शन (एस, ई)', और 'e' 'कर्मचारी' मॉड्यूल इंजेक्शन कर सकते हैं लेकिन मॉड्यूल नाम 'कर्मचारी' कारखाने में जो कुछ भी परिभाषित किया गया है, और इसका उपयोग बिल्कुल परिभाषित किया जाना चाहिए जैसा कि परिभाषित किया गया है। – zsong

+0

मैं 'कर्मचारियों के तर्क के बारे में बात नहीं कर रहा था, वास्तव में। मैं इसके बारे में बात कर रहा था:' कर्मचारीCtrl .resolve = {staff: function (कर्मचारी, $ q, $ मार्ग) ... '' हलचल' क्या है? इसे सीधे नियंत्रक में क्यों परिभाषित किया गया है? मैंने पहले कभी ऐसा कोड नहीं देखा है। –

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