Я немного новичок в англоязычных версиях поста AngularJS и решил попробовать. Я хочу создать библиотеку компонентов пользовательского интерфейса и приложение, которое будет использовать указанную библиотеку. В своей библиотеке я решил создать компоненты как WebComponents, поэтому, следуя учебникам, которые я нашел до сих пор, у меня есть что-то вроде
import { Injector, NgModule } from '@angular/core'
import { createCustomElement } from '@angular/elements';
import { MyButtonComponent} from './my-button.component'
@NgModule({
declarations: [MyButtonComponent],
entryComponents: [MyButtonComponent]
})
export class MyButtonModule {
constructor(injector: Injector) {
const myButton = createCustomElement(MyButtonComponent, { injector });
customElements.define('my-button', myButton);
}
}
Для моего пользовательского компонента. Если я добавлю все файлы (модуль, компонент, шаблон и файлы SCSS) для моего компонента непосредственно в мое приложение, оно будет работать, как и ожидалось, поэтому я знаю, что объявление моего компонента правильное. Однако, если в моем приложении я включаю компонент из своей библиотеки, при запуске приложения с ng serve
я вижу ошибку:
Error: StaticInjectorError(AppModule)[MyButtonModule -> Injector]:
StaticInjectorError(Platform: core)[MyButtonModule -> Injector]:
NullInjectorError: No provider for Injector!
Я использую Angular 6, и у меня оба проекта работают локально, и я использую ng-packagr
, чтобы связать свою библиотеку. Я добавил @angular/core
и @angular/elements
как peerDependencies
в мою библиотеку, и в моем основном приложении мне пришлось добавить
"resolutions": {
"@angular/core": "6.1.4"
}
Для устранения ошибки cannot redeclare block-scoped variable 'ngDevMode'
(не уверен, связано это или нет). Сначала я думал, что ошибка внедрения может быть вызвана этим , но я добавил preserveSymlinks
в свой файл angular.json
, и у меня все еще есть ошибка.
Есть мысли о том, что может быть причиной этого?
ОБНОВЛЕНИЕ: если я копирую файлы вручную из папки библиотеки и вставляю их в папку node_modules
моего основного приложения, это работает, что заставляет меня думать, что это что-то, связанное с символическими ссылками.