ControllerProvider im UI-Router führt zu Fehler

Ich habe einui-router StateProvider und müssen zwischen Controllern und Ansichten basierend auf externen Daten wählen, also habe ich @ verwendTemplateProvider undControllerProvider.

enn ich nur das @ hätTemplateProvider alles funktioniert gut, aber wenn ich das @ hinzufügControllerProvider Ich erhalte diesen Fehler:

Error: [ng:areq] Argument 'fn' is not a function, got Object
http://errors.angularjs.org/1.3.1/ng/areq?p0=fn&p1=not%20aNaNunction%2C%20got%Object
    at REGEX_STRING_REGEXP (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:80:12)
    at assertArg (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:1577:11)
    at assertArgFn (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:1587:3)
    at annotate (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:3417:5)
    at invoke (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:4096:21)
    at Object.instantiate (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:4129:23)
    at http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:8320:28
    at compile (http://localhost:48510/Scripts/Vendor/AngularUIRouter/angular-ui-router.js:3897:28)
    at invokeLinkFn (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:8081:9)
    at nodeLinkFn (http://localhost:48510/Scripts/Vendor/Angular/1-angular.js:7593:11)

Sieht aus wie einundefined serviceName möglicherweise (es heißt got object, aber es sieht aus wie es istundefined aber ich bin nicht großartig beim DebuggenAngularJs)

Hier ist mein Code:

.state('abstractParent.childState', {
    url: '/childState',
    controllerProvider: ['myService', function (myService) {
        return myService
          .isSpecificMember()
          .then(function (result) {  //this returns a promise of a bool.
            if (result.data) {
                return 'SpecificController';
            } else {
                return 'GeneralController';
            }
        })
    }],
    templateProvider: ['myService', '$templateFactory',
     function (myService, $templateFactory) {
        return myService.isSpecificMember().then(function(result) {
            if(result.data)
            {
                return $templateFactory.fromUrl('SpecificView');
            } else {
                return $templateFactory.fromUrl('GenericView');
            }
        })
    }],
    resolve: {
        thing: ['thingService', function (thingService) { 
            //this is only used in one of the controllers.
            return thingService.getThing();
        }]
    }})

BEARBEITE

Änderungen basierend auf Radim Köhlers Antwort

    .state('abstractParent.childState', {
        url: '/childState',
        resolve: {
            controllerName: ['myService', function (myService) {
                return myService.isSpecificMember().then(function (result) {  //this returns a promise of a bool.
                    if (result.data) {
                        return 'SpecificController';
                    } else {
                        return 'GeneralController';
                    }
                })
            }],
            thing: ['thingService', function (thingService) { //this is only used in one of the controllers.
                return thingService.getThing();
            }]
        },
        controllerProvider: ['controllerName', function (controllerName) {
            return controllerName;
        }],
        templateProvider: ['myService', '$templateFactory', function (myService, $templateFactory) {
            return myService.isSpecificMember().then(function(result) {
                if(result.data)
                {
                    return $templateFactory.fromUrl('SpecificView');
                } else {
                    return $templateFactory.fromUrl('GenericView');
                }
            })
        }]
        })

Neuer Fehler:

    Error: [$injector:unpr] Unknown provider: controllerNameProvider <- controllerName
    http://errors.angularjs.org/1.3.1/$injector/unpr?p0=controllerNameProvider%20%3C-%20controllerName
        at REGEX_STRING_REGEXP (1-angular.js:80)
        at 1-angular.js:3930
        at Object.getService [as get] (1-angular.js:4077)
        at 1-angular.js:3935
        at getService (1-angular.js:4077)
        at Object.invoke (1-angular.js:4109)
        at angular-ui-router.js:3465
        at processQueue (1-angular.js:12901)
        at 1-angular.js:12917
        at Scope.$get.Scope.$eval (1-angular.js:14110)

LÖSUN

Dies benötigt mindestens Version0.2.14 vonangular-ui-router.js

Antworten auf die Frage(2)

Ihre Antwort auf die Frage