UI Router не работает с компонентными состояниями

Фон:
В приложении, над которым я работаю, у нас есть компонент, который используется в двух местах. В одном месте это вызывается из материального дизайна bottomSheet система. В другом мы используем компонент напрямую через систему состояний ui-router.

Вот установка, которая вызывает проблемы. У меня уже есть angular.module Заявление, в котором установлены все надлежащие зависимости пакетов - я уже несколько месяцев работаю над этим приложением со своей командой, проблема заключается именно в приведенном ниже коде, который я только что добавил.

routes.ts

namespace Main {
    RouteConfig.$inject = ['$stateProvider'];

    function RouteConfig($stateProvider) {
        $stateProvider
            .state('main.myAwesomeFeature', {
                url: '^/myawesomefeature',
                component: 'awesomefeature',
                resolve: {
                    awesomeDefaults: () => new Controllers.AwesomeDefaults(1, 2, 3)
                }
            });

        // Other routing minutiae, unimportant to the question
    }

    angular.module('app').config(RouteConfig)
}

awesomefeature.ts

namespace Controllers {
    export class AwesomeDefaults {
        public constructor(
            number1: number,
            number2: number,
            number3: number
        ) {
        }
    }

    export class AwesomeFeatureCtrl {
        public static $inject: string[] = [
            'awesomeDefaults'
        ];
        public controller(
            public awesomeDefaults: AwesomeDefaults
        ) {               
        }

        // ...Other methods and irrelevant stuff...
    }

    angular
        .module('app')
        .controller('awesomeFeatureCtrl', AwesomeFeatureCtrl);
}

namespace Components {
    export var awesomeFeatureCmpt: ng.IComponentOptions = {
        bindings: {},
        controller: 'awesomeFeatureCtrl',
        controllerAs: '$ctrl',
        templateUrl: '(Irrelevant, as is the HTML)'
    };

    angular
        .module('app')
        .component('awesomefeature', awesomeFeatureCmpt);
}

Проблема: всякий раз, когда я пытаюсь перейти непосредственно к "Удивительной функции", мой HTML-код не только не отображается, но и появляется следующая ошибка консоли:

angular.js:14525 Error: [$injector:unpr] Unknown provider: awesomeDefaultsProvider <- awesomeDefaults <- awesomeFeatureCtrl  
http://errors.angularjs.org/1.6.4/$injector/unpr?p0=awesomeDefaultsProvider%20%3C-%20awesomeDefaults%20%3C-%20awesomeFeatureCtrl  
    at angular.js:66  
    at angular.js:4789  
    at Object.getService [as get] (angular.js:4944)  
    at angular.js:4794  
    at getService (angular.js:4944)  
    at injectionArgs (angular.js:4969)  
    at Object.invoke (angular.js:4995)  
    at $controllerInit (angular.js:10866)  
    at nodeLinkFn (angular.js:9746)  
    at angular.js:10154  

Похоже, что по какой-то причине, $stateProvider.state({resolve}) неправильно разрешает мой awesomeDefaults и вводить значение в awesomeFeatureCtrl,

Вопрос:
Почему нет resolve работает как я помню что надо?

Насколько я понимаю, resolve объект берет каждый именованный индекс на нем, выполняет любую функцию на нем, а затем разрешает его в контроллере объекта в маршруте, в соответствии с документацией UI Router. Очевидно, я что-то неправильно помню или неправильно понимаю.

1 ответ

После более тщательного изучения вашей ошибки я уже сталкивался с этой проблемой. Попробуйте изменить это

resolve: {
                awesomeDefaults: () => new Controllers.AwesomeDefaults(1, 2, 3)
            }

К этому

resolve: {
                awesomeDefaults: /** ngInject */ () => new Controllers.AwesomeDefaults(1, 2, 3)
            }

Чтобы правильно внедрить awesomeDefaults.

Другие вопросы по тегам