在 Angular 中使用 AngularJS 服务

2024-01-02

我正在寻找 Angular 项目中包含 AngularJS 服务。

这是我的 main.ts:

import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app/app.module';
import {UpgradeModule} from "@angular/upgrade/static";
import {environment} from './environments/environment';

platformBrowserDynamic().bootstrapModule(AppModule)
  .then(ref => {
    const upgrade = ref.injector.get(UpgradeModule) as UpgradeModule;
    upgrade.bootstrap(document.body, ['dmdWorkplace', 'dmdLogin'], {strictDi: true});
  })
  .catch(err => console.log(err));

这是我的 app.module.ts:

//@angular
import {BrowserModule} from '@angular/platform-browser';
import {CUSTOM_ELEMENTS_SCHEMA, Inject, NgModule} from '@angular/core';
import {UpgradeModule} from '@angular/upgrade/static';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {HttpClientModule} from '@angular/common/http';

//Modules
import {AppRoutingModule} from './app-routing.module';
import {MaterialModule} from './material.module';

//Components
import {DmdWhlComponentMain} from './main/dmd-whl.component.main';
import {DmdWhlComponentRegistries} from './registries/dmd-whl.component.registries';

//Services
import {DmdWhlGlobalService} from './services/dmd-whl.global.service';
import {DmdWhlLabelService} from './services/dmd-whl.label.service';

import {TranslateModule, TranslateService} from '@ngx-translate/core';
import {DOCUMENT} from "@angular/common";

@NgModule({
  declarations: [
    DmdWhlComponentMain,
    DmdWhlComponentRegistries
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MaterialModule,
    AppRoutingModule,
    UpgradeModule,
    HttpClientModule,
    TranslateModule.forRoot()
  ],
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
  entryComponents: [DmdWhlComponentMain],
  providers: [
    DmdWhlGlobalService,
    DmdWhlLabelService,
    {
      provide: 'dmdLoginAuthenticationService',
      useFactory: (i) => {
        i.get('dmdLoginAuthenticationService')
      },
      deps: ['$injector']
    },
    {
      provide: '$scope',
      useFactory: i => i.get('$rootScope'),
      deps: ['$injector']
    }
  ],
  bootstrap: [DmdWhlComponentMain]
})

export class AppModule {
  labels: object = {};
  browserLanguage = navigator.language === 'en' ? 'en-US' : 'it-IT';

  constructor(private labelService: DmdWhlLabelService,
              private translate: TranslateService,
              @Inject('dmdLoginAuthenticationService') dmdLoginAuthenticationService,
              @Inject(DOCUMENT) private document: Document) {
    this.getLabels();
    this.run();
  }

  ngDoBootstrap() {
  }

  getLabels() {
    this.labelService.getLabels(this.browserLanguage, 'label').then(res => {
      this.translate.setDefaultLang('it'); //Sets the default language to use as a fallback
      this.translate.setTranslation(navigator.language, res['data'][this.browserLanguage]); //Sets an object of translations for a given language
    });
  }

  run() {
    if (navigator.platform.match('Mac') !== null) {
      this.document.body.classList.add('mac');
    }
  }
}

错误是:

Error: Trying to get the AngularJS injector before it being set.
    at injectorFactory (static.js:678)
    at _callFactory (core.js:10645)
    at _createProviderInstance$1 (core.js:10599)
    at initNgModule (core.js:10549)
    at new NgModuleRef_ (core.js:11792)
    at createNgModuleRef (core.js:11782)
    at Object.debugCreateNgModuleRef [as createNgModuleRef] (core.js:14092)
    at NgModuleFactory_.create (core.js:15216)
    at eval (core.js:5370)
    at ZoneDelegate.invoke (zone.js:392)

我今天也有同样的错误信息,并且可以解决它。看来您的代码也遇到了同样的问题。

在混合应用程序中,您始终需要首先引导 AngularJS。要实现此目的,请删除升级部分(对then(...)) 在 main.ts 中,更改

  bootstrap: [DmdWhlComponentMain]

into

  entryComponents: [DmdWhlComponentMain]

在你的AppModule中,并实现ngDoBootstrap()这边走:

  ngDoBootstrap(app) {
    this.upgrade.bootstrap(document.body, ['dmdWorkplace', 'dmdLogin'], {strictDi: true});
    app.bootstrap(DmdWhlComponentMain);
  }

积分转到https://blog.angularindepth.com/how-to-manually-bootstrap-an-angular-application-9a36ccf86429 https://blog.angularindepth.com/how-to-manually-bootstrap-an-angular-application-9a36ccf86429这帮助我解决了这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Angular 中使用 AngularJS 服务 的相关文章

随机推荐

  • swift 2 解析 facebook SDK ios 9

    我正在尝试通过 Facebook 登录用户 在以前的 swift 1 2 版本中 一切都工作得很好 但迁移后我似乎无法通过我的 FB 帐户登录 但仍然收到错误消息 canOpenURL 失败的 URL fbauth authorize cl
  • iOS 上出现 UnsatisfiedLinkError 但 Android 上没有,loadLibrary 总是成功

    我有一些 Java 和 C 代码 可以在两个平台上编译并构建本机库 我可以验证这些库是否包含我期望的功能 并且 Java 能够在 Android 和 iOS 上加载这些库 在 Android 上 一切顺利 没有崩溃 但在 iOS 上 我遇到
  • Discord 机器人“有时”无法显示表情

    作为一名法国昆特牌玩家 我构建了一个discord 机器人 使用node js 和discord js 来在您命名卡片时显示该卡片的信息 它使用一些自定义表情来显示它的某些部分 它在几周内运行良好 但最近有些卡片在被调用时不显示表情 我不知
  • wagon ssh / scp:没有可用于访问存储库的连接器...默认类型使用可用工厂 WagonRepositoryConnectorFactory

    这是 wagon ssh 2 10 的错误吗 什么可能有效 例如 Maven Wagon SSH 和 pom 设置的哪种组合可以恢复 Maven 3 0 5 和 wagon ssh 2 4 的行为 在我的 pom xml 中升级到 wago
  • R 脚本和库预加载?

    我创建了一个 R 脚本 它需要首先加载一些库 问题是脚本需要 1 6 秒才能完成计算 使用 Linux 命令 time 多次测量 而加载库只需要 0 7 秒 该脚本运行频率很高 因此库加载的延迟几乎占了实际工作量的80 有什么方法可以预加载
  • 为什么 Spring 报告工厂方法 arg 不明确?

    我正在尝试创建这个 bean
  • “docker images ls”有什么作用?

    我查阅了文档以了解命令之间的区别docker image 管理图像 和docker images 列出图像 所以第二个选项似乎是一个捷径docker image ls其中还列出了图像 我注意到的是 跑步时docker image ls or
  • 跨 Node.js 和 nginx 的身份验证

    由于我的大部分内容都是静态的 我计划让 nginx 来处理静态文件的服务 但静态内容也是私有的 不同的用户有不同的内容 应用程序本身是用node js express js编写的 我想知道我应该如何处理身份验证 授权 有没有什么 任何 ng
  • 在 Amazon EC2 中,如何将 EBS 卷复制到另一个用户?

    我已经使用我的亚马逊凭证创建了一个亚马逊 EBS 卷 我的客户向我提供了他的客户凭证 以便我为他创建一台 EC2 机器并附上我创建的磁盘 我该怎么做 如果重要的话我正在使用网络控制台 让我补充一点 当我在客户的帐户中创建卷并将快照 ID 设
  • 找不到“Google/Analytics.h”文件 - XCode 7

    我在将 Google Analytics SDK 集成到我的 iOS 项目中时遇到很多麻烦 我正在使用 XCode 7 并针对 iOS 7 使用 Swift 2 0 不过我可以让示例正常工作 尽管没有转换为 Swift 2 0 我尝试过通过
  • 如何使用 MATLAB 自动填充任意图像?

    这是基于此答案的进一步问题 如何在 MATLAB 中实现鱼眼镜头效果 桶形变换 https stackoverflow com questions 2589851 how can i implement this visual effect
  • Android - 警报有时在很长一段时间后不会触发

    我的应用程序有一个大问题已经好几天了 如果我的英语事先不是那么地道 我深表歉意 我实现了一个 AlarmManager 让我的应用程序的用户可以选择在当前或第二天的任何时间启动特定服务 所以例如用户可能选择将我的服务时间设置为明天上午 08
  • 如何在 Rails 中使用 Resque 指定用于所有作业的默认队列?

    我希望所有排队调用都默认到某个队列 除非另有指定 这样它是 DRY 并且更易于维护 为了指定一个队列 文档说要在类中定义一个变量 queue X 所以 我尝试执行以下操作 但没有成功 有什么想法吗 class ResqueJob class
  • deno 捆绑失败。类型“ReadableStream”上不存在属性“getIterator”

    使用捆绑包运行 deno 失败并出现以下错误 error TS2339 ERROR Property getIterator does not exist on type ReadableStream
  • 将 matplotlib 子图保存到图像文件

    我对matplotlib我一瘸一拐地走着 也就是说 我还没有找到这个问题的明显答案 我有一个散点图 我想按组着色 它看起来像通过循环绘制 https stackoverflow com questions 21654635 scatter
  • Hibernate 使用一级或二级缓存加载所有实体

    我们有一个完整的实体表 需要在休眠会话期间加载 而我知道加载所有实体的唯一方法是通过 HQL 查询 public
  • 打破嵌套循环

    有人可以告诉我当我有嵌套循环时如何打破主循环吗 例子 Main loop for int y 0 y lt 100 y 10 Sub loop for int x 0 x lt 100 x 10 if x 60 Break the main
  • 使用CloudFlare、Heroku、RoR时如何设置真实IP地址?

    我最近刚刚开始使用 CloudFlare 但仍然存在获取 CloudFlare 的代理 IP 地址而不是访问者地址的挥之不去的问题 CloudFlare 有很多解决方案 https support cloudflare com hc en
  • SQL 自定义 Order By 子句

    一个简单的问题 我有一个查询返回 2 列 描述 和 金额 在描述中我们有 3 个结果 黄金 拥有 青铜 无土地 和 白银 已识别 提供 我希望结果按以下顺序显示 金 银 铜 按升序或降序排序无法实现此目的 有没有办法自定义 Order by
  • 在 Angular 中使用 AngularJS 服务

    我正在寻找 Angular 项目中包含 AngularJS 服务 这是我的 main ts import platformBrowserDynamic from angular platform browser dynamic import