AngularJS, oplossen en onbekende provider

Ik heb twee routes met vastberadenheid. Gaat als volgt:

.when('/foos', {
templateUrl: 'views/foos.html',
controller: 'FoosCtrl',
resolve: {
    foo_list: ['$q', '$route', '$timeout', '$location', 'Foos', function($q, $route, $timeout, $location, Foos) {
        // postpone the execution
        var deferred_foo = $q.defer()
        Foos.getFoos({token:session_uid}, successCb)
        function successCb(list) {
            if(list['status'] === 200) {
                deferred_foo.resolve(list)
            }
            else {
                alert('Crashcrashcrash')
                deferred_foo.reject("Something just wasn't right")
                //$location.path('maintenance')
            }
        }
        return deferred_foo.promise
        }]
    }
})
.when('/r/:type/:bar_id', {
    templateUrl: 'views/bar.html',
    controller: 'BarsCtrl',
    resolve: {
        bar: ['$q', '$route', '$timeout', '$location', 'Bars', function($q, $route, $timeout, $location, Bars) {
            // postpone the execution
            var deferred = $q.defer()
            Bars.getBar({type: bar_type}, successCb)    
            function successCb(result) {
                if(result['status'] === 200) {
                    deferred.resolve(result)    
                }
                else {
                    alert('Crashcrashcrash')
                    deferred.reject("Something just wasn't right")
                    $location.path('foos')
                }
                return deferred.promise
                }]
            }
        })

Dan heb ik twee controllers die als volgt werken:

App.controller('FoosCtrl', ['$scope', '$location', 'Foos', 'foo_list', function($scope, $location, Foos, foo_list) {...}
 App.controller('BarsCtrl', ['$scope', '$routeParams', '$location', 'Bars', 'bar', 'sharedService', function($scope, $routeParams, $location, Bars, bar, sharedService) {...}

Kan iemand uitleggen waarom Bar werkt, maar Foo geeft me Error: Unknown provider: foo_listProvider <- foo_list? Ik heb geprobeerd foo_listte vervangen door een andere naam voor het geval camelCasing iets heeft gedaan maar niet heeft geholpen.


Antwoord 1, autoriteit 100%

Dus deze vraag leek verrassend veel op die van mij, die ik zojuist heb bedacht met hulp van de mensen op het Angular IRC-kanaal… ben jij toevallig je controller aan het instellen via ng-controller? Ik had:

   <div ng-controller="myCtrl">

… wanneer het verwijderd had moeten worden:

   <div>

… omdat ik de controller aan het instellen was in de oplossing op de router. Dat is wat ik aan het doen was en het veroorzaakte dit probleem. Je kunt hier meer zien:

https://stackoverflow.com/a/18305423/1306982


Antwoord 2

foo_list <- wordt het js-bestand hiervoor in een scripttag in de uw html-pagina geladen? het kan gewoon zo zijn dat wanneer u bent vergeten fabriek/service/controller op te nemen en eigenlijk bent vergeten deze op te nemen in een scripttag op de index/app html-pagina (of shims nodig heeft)

Oké, ik zie net je reactie en breid het antwoord hier uit, omdat het makkelijker is om het hier te doen.

Uw code waarin u de controller aangeeft, moet lezen als

App.controller('FoosCtrl', 
   ['$scope', '$location', 'Foos', /* comment out foo_list here*/ 
    function($scope, $location, Foos, foo_list /* this remains */) {
  ...
}

wanneer de route wordt gewijzigd, worden dingen die u noemt in ‘resolve’ opgelost door ui-router. Maar het is de plaats waar je je FoosCtrl declareert, je hebt niet echt een provider om het op te lossen.

Probeer dit eens, ik had vorige week een soortgelijk geval als dit.


Antwoord 3

Net als een heads-up, heb ik net een soortgelijk probleem gehad die werd veroorzaakt door het toevoegen van de oplossingsvariabelen als een afhankelijkheid van de controller terwijl hij de respons funciton niet in de $stateProvider.state()nog.

Het toevoegen van de oplossingsfunctie opgelost de ontbrekende afhankelijkheid van
(Ik begrijp het nog steeds niet helemaal – ik zou blij zijn als iemand zijn kennis in de opmerkingen zou kunnen delen)

Other episodes