Ошибка при загрузке контроллеров - перенос AngularJS1 в Angular6 - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь обновить компоненты, написанные на AngularJS1, до Angular6. В моем примере я использую обертки для всех существующих компонентов AngularJS1, расширив " UpgradeComponent ", помещенный в папку " directive-wrappers ". Когда я пытаюсь добавить некоторые контроллеры, которые не имеют никаких директив, я получаю сообщение об ошибке

Error: [$injector:unpr] Unknown provider: testDirective2DirectiveProvider <- testDirective2Directive
https://errors.angularjs.org/1.7.8/$injector/unpr?p0=testDirective2DirectiveProvider%20%3C-%20testDirective2Directive
    at eval (angular.js:138)
    at eval (angular.js:4924)
    at Object.getService [as get] (angular.js:5084)
    at eval (angular.js:4929)
    at Object.getService [as get] (angular.js:5084)
    at Function.UpgradeHelper.getDirective (upgrade_helper.ts:56)
    at new UpgradeHelper (upgrade_helper.ts:52)
    at TestDirective2Wrapper.UpgradeComponent (upgrade_component.ts:106)
    at new TestDirective2Wrapper (TestDirective2Wrapper.ts:27)
    at createClass (provider.ts:265) "<app-root _nghost-c69="">"

Я попытался добавить studentController и homePageController, но не смог загрузить его. Есть идеи, почему я сталкиваюсь с этой проблемой? https://stackblitz.com/edit/ng6hybrid-c8h6uv

1 Ответ

0 голосов
/ 14 октября 2019

Есть две проблемы, которые необходимо решить. Во-первых, в файле studentController.js вы используете синтаксис var mainApp = angular.module("testApp", []);, который сбрасывает модуль AngularJS, а все, что было создано до этого, удаляется.

Чтобы ответить на ваш вопрос о контроллерах, контроллеры AngularJS могутне обновлять напрямую, используя UpgradeComponent (см. https://angular.io/guide/upgrade#using-angularjs-component-directives-from-angular-code), потому что они не являются компонентами / директивами, имеющими шаблон. Вот почему вы получаете ошибку (после исправления первой проблемы) Unknown provider: studentControllerDirectiveProvider <- studentControllerDirective. не удается найти директиву для эталонного studentController, поэтому она добавляет директиву, чтобы посмотреть, есть ли в ней что-либо.

Чтобы это исправить, либо преобразуйте контроллер в AngularJS в директиву с шаблоном, либо преобразуйте ее всервис в AngularJS, а затем внедрите его в Angular, используя UpgradeModule. Имейте в виду, что вам понадобится где-то шаблон для этого контроллера, чтобы его можно было обновить до Angular. Рабочий пример этого можно найти в моем стековозглашенном ниже.

https://stackblitz.com/edit/ng6hybrid-zs6waw?file=app%2Fdirective-wrappers%2FstudentControllerWrapper.ts

...