角度错误“没有 InjectionToken ORIGIN_URL 的提供程序!”

2023-12-28

我正在尝试通过以下方式制作一个具有 ngx-translate 功能的 Angular 应用程序this https://medium.com/letsboot/translate-angular-4-apps-with-ngx-translate-83302fb6c10d教程。

我完成了所有步骤,但收到错误:“异常:调用节点模块失败并出现错误:错误:没有 InjectionToken ORIGIN_URL 的提供程序! 错误(本地)”,我不知道还能尝试什么。

我的应用程序模块.ts

import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';

import { HttpModule, Http } from '@angular/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

import { AppComponent } from './components/app/app.component'
import { NavMenuComponent } from './components/navmenu/navmenu.component';
import { HomeComponent } from './components/home/home.component';
import { FetchDataComponent } from './components/fetchdata/fetchdata.component';
import { CounterComponent } from './components/counter/counter.component';

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

import { ORIGIN_URL } from './constants/baseurl.constants';

export function createTranslateLoader(http: Http, baseHref) {
    // Temporary Azure hack
    if (baseHref === null && typeof window !== 'undefined') {
        baseHref = window.location.origin;
    }
    // i18n files are in `wwwroot/assets/`
    return new TranslateHttpLoader(http, `${baseHref}/assets/i18n/`, '.json');
}

export const sharedConfig: NgModule = {
    bootstrap: [ AppComponent ],
    declarations: [
        AppComponent,
        NavMenuComponent,
        CounterComponent,
        FetchDataComponent,
        HomeComponent
    ],
    imports: [
        HttpModule,
        TranslateModule.forRoot({
            loader: {
                provide: TranslateLoader,
                useFactory: (createTranslateLoader),
                deps: [Http, [ORIGIN_URL]]
            }
        }),
        RouterModule.forRoot([
            { path: '', redirectTo: 'home', pathMatch: 'full' },
            { path: 'home', component: HomeComponent },
            { path: 'counter', component: CounterComponent },
            { path: 'fetch-data', component: FetchDataComponent },
            { path: '**', redirectTo: 'home' }
        ])
    ]
};

我的应用程序组件.ts:

import { Component, Inject } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { Http } from '@angular/http';
import { ORIGIN_URL } from '../../constants/baseurl.constants';

@Component({
    selector: 'app',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})
export class AppComponent {
    user = {
        name: 'Arthur',
        age: 42
    };

    constructor(private translate: TranslateService, private http: Http,
        @Inject(ORIGIN_URL) private baseUrl: string) {
        translate.setDefaultLang('ro');
    }

    switchLanguage(language: string) {
        this.translate.use(language);
    }
}

我的包.json

"name": "WebApplicationBasic",
  "version": "0.0.0",
  "dependencies": {
    "@angular/animations": "4.1.2",
    "@angular/common": "4.1.2",
    "@angular/compiler": "4.1.2",
    "@angular/core": "4.1.2",
    "@angular/forms": "4.1.2",
    "@angular/http": "4.1.2",
    "@angular/platform-browser": "4.1.2",
    "@angular/platform-browser-dynamic": "4.1.2",
    "@angular/platform-server": "4.1.2",
    "@angular/router": "4.1.2",
    "@ngx-translate/core": "^7.1.0",
    "@ngx-translate/http-loader": "^1.0.1",
    "@types/node": "7.0.18",
    "angular2-template-loader": "0.6.2",
    "aspnet-prerendering": "^2.0.5",
    "aspnet-webpack": "^1.0.29",
    "awesome-typescript-loader": "3.1.3",
    "bootstrap": "3.3.7",
    "css": "2.2.1",
    "css-loader": "0.28.1",
    "es6-shim": "0.35.3",
    "event-source-polyfill": "0.0.9",
    "expose-loader": "0.7.3",
    "extract-text-webpack-plugin": "2.1.0",
    "file-loader": "0.11.1",
    "html-loader": "0.4.5",
    "isomorphic-fetch": "2.2.1",
    "jquery": "3.2.1",
    "json-loader": "0.5.4",
    "npm": "^2.15.11",
    "preboot": "4.5.2",
    "raw-loader": "0.5.1",
    "reflect-metadata": "0.1.10",
    "rxjs": "5.4.0",
    "style-loader": "0.17.0",
    "to-string-loader": "1.1.5",
    "typescript": "2.3.2",
    "url-loader": "0.5.8",
    "webpack": "2.5.1",
    "webpack-hot-middleware": "2.18.0",
    "webpack-merge": "4.1.0",
    "zone.js": "0.8.10"
  }

我缺少什么?

谢谢你!


UPDATE:

现在没有错误了,但是 ngx-translate 不起作用。

For

{{ 'ENGLISH' | translate }}

{{ 'NORWEGIAN' | translate }}

我分别进入html英语、挪威语,

翻译服务不起作用。

我已经调试了 javascript 代码,但没有结果......


我怀疑作为ORIGIN_URL已被用作依赖项,但似乎没有注册providersNgModule 数组。

imports: [
    HttpModule,
    //registered dependency with `ORIGIN_URL` name
    {provide: 'ORIGIN_URL', useValue: ORIGIN_URL}
    TranslateModule.forRoot({
        loader: {
            provide: TranslateLoader,
            useFactory: (createTranslateLoader),
            deps: [Http, 'ORIGIN_URL'] //passed dependency name in `deps`
        }
    }),
    RouterModule.forRoot([
        { path: '', redirectTo: 'home', pathMatch: 'full' },
        { path: 'home', component: HomeComponent },
        { path: 'counter', component: CounterComponent },
        { path: 'fetch-data', component: FetchDataComponent },
        { path: '**', redirectTo: 'home' }
    ])
] 

另外你还必须使用'ORIGIN_URL'(作为字符串)与组合@Inject同时注入依赖。

constructor(private translate: TranslateService, private http: Http,
    @Inject('ORIGIN_URL') private baseUrl: string) {
    translate.setDefaultLang('ro');
}

此外,你可以摆脱@Inject('ORIGIN_URL')部分通过创建OpaqueToken https://blog.thoughtram.io/angular/2016/05/23/opaque-tokens-in-angular-2.html为了你的依赖

共享/origin-url.service.ts

import { ORIGIN_URL as url } from '../../constants/baseurl.constants';
import { OpaqueToken } from '@angular/core'

export let ORIGIN_URL = new OpaqueToken('ORIGIN_URL');
//below is `InjectionToken` implementation
//export let API_URL = new InjectionToken<string>('ORIGIN_URL');
export const THIRDPARTYLIBPROVIDERS = { provide: ORIGIN_URL , useValue: url }
;

然后注册这个ORIGIN_URL inside NgModule的元数据AppModule

import { THIRDPARTYLIBPROVIDERS , ORIGIN_URL } from './shared/origin-url.service'

imports: [
    HttpModule,
    THIRDPARTYLIBPROVIDERS, //<-- registered provider here
    TranslateModule.forRoot({
        loader: {
            provide: TranslateLoader,
            useFactory: (createTranslateLoader),
            deps: [
              Http, 
              new Inject(ORIGIN_URL), //remove this while using `InjectionToken`
              //ORGIN_URL //<-- this will be with `InjectionToken`
            ] //passed dependency name in `deps`
        }
    }),
    //...other imports
];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

角度错误“没有 InjectionToken ORIGIN_URL 的提供程序!” 的相关文章

随机推荐

  • Android中如何从apk中获取包名?

    我正在开发一个应用程序 其中包含应用程序列表 单击后 用户将被重定向到 Play 商店以下载此应用程序 成功下载后 我必须将该应用程序包名称发送到服务器以验证它 我怎样才能做到这一点 我假设您想在运行时执行此操作 因此您的应用程序可以读取自
  • 重命名 Pandas 中的“None”值

    这可能非常简单 但我就是找不到答案 我使用 GeoPandas 从形状文件导入数据 把它变成熊猫DataFrame 我有一个带有三个字母代码的对象字段和None缺失数据的值 我该如何改变None类似于 pandas 中的 vcv 我试过这个
  • Golang从文件嵌入html

    如果我有这样的 HTML 文件 我该如何在 Golang 中执行以下操作
  • 应用程序部署到II后如何调试?

    大家好 我正在使用 net 2008 和 Oracle 10g 作为数据库来开发应用程序 我已经在 IIS 中部署了该应用程序 现在当两个用户登录到同一应用程序时 同一页面一次会出现错误 如下所示 必须为此操作打开连接 无法访问已释放的对象
  • 类路径似乎正确,但 JVM 仍然无法找到或加载主类

    我对编程和 java 比较陌生 正在尝试学习如何从命令行创建用户定义的包 我得到以下信息 Error Could not find or load main class TestPhone 我已经查看了有关此类错误的帖子 包括评论良好的帖子
  • 导入 pandas 模块给出属性错误

    我最近从 Windows 更改为 Ubuntu 12 04 LTS 并且正在尝试掌握 Python 我复制了几个示例命令http pandas pydata org pandas docs stable 10min html http pa
  • 非法字符导致 xml 解析错误

    所以 我问这是最后的手段 因为我完全没有想法 我有一个 Windows ASP NET ASMX Web 服务应用程序 它返回一个带有 的序列化 Person 对象 姓名 地址 电子邮件 等 但是 xml 中的一些属性的编码非常奇怪 例如
  • 如何在 Android Activity 中垂直滚动

    我有以下布局
  • 尝试使用带有nodeJS的构建脚本构建LESS(更少的CSS)

    我们正在使用 NodeJS 来构建我们的项目 我们已将 LESS CSS 集成为该项目的一部分 我们试图保持我们的构建干净 并希望能够调用 lessc 命令 或类似的命令 来构建我们的 LESS 文件 LESS 文档不是很深入 但希望与社区
  • 错误:“experimental.runtime”需要“experimental.reactRoot”与 React 18 一起启用

    我有一个项目 next 12 1 6 React 18 1 React dom 18 1 现在我想向其中添加 React 服务器组件 更新了我的next config js像这样 const nextConfig distDir next
  • “安全组是有状态的”是什么意思?

    在AWS文档中它说 安全组是有状态的 如果您从实例发送请求 则无论入站安全组规则如何 都允许该请求的响应流量流入 我不明白这种行为如何被视为有状态 无国籍情况将如何进行 我认为响应流量将取决于某种类型的规则 但这与状态有何关系 Thanks
  • 如何在 Haskell 中创建数字列表

    我需要创建一个函数来制作行和列大小的板 然后用零填充它 mkBoard 2 3 会使 0 0 0 0 0 0 我真的不知道从哪里开始 因为我是 Haskell 编程的新手 我想这个函数会是这样的 mkBoard m n m take n r
  • PyCharm 自动完成导入模块

    我是 Python 新手 正在尝试熟悉其语法和语言 我尝试了一下 PyCharm 发现它非常舒服 唯一的问题是自动完成功能没有像我预期的那样工作 作为学习过程和研究某些模块的一部分 它对我来说非常重要 即使没有自动完成功能 我的代码也可以工
  • Rails 4 覆盖设备如何响应错误路径

    我已经为此苦苦挣扎了一段时间 我有一个 Rails4 Devise 3 1 应用程序 系统中有两个用户 毕业生 雇主 一个设计用户可以通过多态性成为毕业生或雇主 profile协会 我有毕业生通过以下方式注册 graduate sign u
  • Vue 中井号 (#) 的含义是什么?

    我是一个相当新的 Vue 开发人员 在堆栈中的每个地方 我都会在组件组件中看到这样的代码
  • Android 应用市场更新传播

    我将新版本的 APK 上传到 Android 市场并 激活 然后保存 我的发布商 主页报告说这是我想要的版本 但应用程序市场中的应用程序下载页面仍然显示以前的版本 有传播期吗 是的 有一个传播期 您的应用最多可能需要 48 小时才会出现在市
  • 干扰器:门控序列

    我正在研究 Java 中的 Disruptor 我不明白门控序列的含义是什么 我知道它的核心部分是环形缓冲区 每个缓冲区都与一个序列号相关联 实际上LMAX实现的核心部分是Sequencer和它的Sequences 所以ringBuffer
  • Python selenium 进入#document

    我怎样才能继续寻找 document中的元素 div document div Element I want to find div div 我认为你的问题不在于a 文档但与iframe from selenium import webdr
  • Git 初学者:权威的实用指南

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 好吧 看完后PJ Hyett 的这篇文章 https stackoverflow com qu
  • 角度错误“没有 InjectionToken ORIGIN_URL 的提供程序!”

    我正在尝试通过以下方式制作一个具有 ngx translate 功能的 Angular 应用程序this https medium com letsboot translate angular 4 apps with ngx transla