1

我正在尝试创建一种“最简单”的机制,用于在 Angular Web 项目和 Ionic/Angular 移动应用程序之间共享代码。我也一直在探索 monorepo 方法,但我想看看是否可以从移动项目中简单地导入存在于 Web 项目中的模块。

这似乎在多个 Angular 项目之间完美运行,但是当我将服务(它本身使用另一个服务)导入 Ionic 项目时,我得到运行时错误:'inject() must be called from an injection context'。

我想知道这是否是一个可以解决的问题,或者它是不应该工作的东西?

我可以使用 Angular 10.0.5 和 Ionic 6.11.0(它本身安装 Angular 9.1.6)通过一对最小的新安装项目来证明这一点。

我尝试了一些通过搜索找到的建议:

  • 在 angular.json 中将 preserveSymlinks 设置为 true
  • 在 tsconfig.json 中设置 "paths": { "@angular/ ": [ "./node_modules/@angular/ " ] }

我还尝试了一些在导入应用程序中提供服务的不同方式:

  • 提供在:根
  • app.module.ts 提供者列表中的类
  • [MyOtherService, { provide: MyService, useClass: MyService }] 形式的显式提供程序

编辑:为了演示这个问题,我在 Angular 项目中创建了 2 个非常基本的虚拟服务,其中一个引用了另一个:

虚拟服务.ts

import {Injectable} from '@angular/core';
import {Dummy2Service} from './dummy2.service';

@Injectable({
  providedIn: 'root'
})
export class DummyService {

  constructor(private d2Service: Dummy2Service) {}

  get str() {return "Service 1";}

  get str2() {return this.d2Service.str;}
}

Dummy2Service

import {Injectable} from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class Dummy2Service {

  constructor() {}

  get str() {return "Service 2";}
}

然后在 Ionic 项目中,导致错误所需要做的就是在应用程序组件中引用一个虚拟服务(来自另一个项目):

// import references a service in another project
import {DummyService} from '../../../my-app2/src/app/dummy.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  constructor(private dummyService: DummyService) {
  }
}
4

0 回答 0