我使用的是Angular 17的独立组件.当我使用模块架构时,我没有这个问题.我把它添加到AppModule的进口中,它工作得很好.

imports: [
 TranslateModule.forRoot(loader)
],

但如果我在独立组件中添加TranslateModule.forRoot(loader)

@Component({
 selector: 'app-main-work-space',
 standalone: true,
 imports: [
  // @ts-ignore
  TranslateModule.forRoot(loader)
 ],
 templateUrl: './main-work-space.component.html',
 styleUrl: './main-work-space.component.scss'
})

结果我犯了这个错误.

✘ [ERROR] TS-992012: 'imports' contains a ModuleWithProviders value, likely the result of a 'Module.forRoot()'-style call. These calls are not used to configure components and are not valid in standalone component imports - consider importing them in the application bootstrap instead.

我试着加@ts-ignore,但没用.

我怎么才能修好它呢?

推荐答案

我认为您错过了translation moduleimportProvidersFrom包装器,请找到下面的工作示例和额外的示例代码,以帮助您解决问题!

import { Component, importProvidersFrom } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { CommonModule } from '@angular/common';
import { provideHttpClient } from '@angular/common/http';
import { bootstrapApplication } from '@angular/platform-browser';
import { AppModule } from './app/app.module';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import 'zone.js';

// AoT requires an exported function for factories
export function HttpLoaderFactory(httpClient: HttpClient) {
  return new TranslateHttpLoader(httpClient);
}

@Component({
  selector: 'app-root',
  imports: [CommonModule, TranslateModule],
  standalone: true,
  template: `
    <div>
      <h2>{{ 'HOME.TITLE' | translate }}</h2>
      <label>
        {{ 'HOME.SELECT' | translate }}
        <select #langSelect (change)="translate.use(langSelect.value)">
          <option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{ lang }}</option>
        </select>
      </label>
    </div>
  `,
})
export class AppComponent {
  constructor(public translate: TranslateService) {
    translate.addLangs(['en', 'fr']);
    translate.setDefaultLang('en');

    const browserLang = translate.getBrowserLang();
    translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');
  }
}

bootstrapApplication(AppComponent, {
  providers: [
    provideHttpClient(),
    importProvidersFrom(
      TranslateModule.forRoot({
        loader: {
          provide: TranslateLoader,
          useFactory: HttpLoaderFactory,
          deps: [HttpClient],
        },
      })
    ),
  ],
});

stackblitz

Stackblitz for reference not by me

Angular相关问答推荐

我使用Ngrx的子集 Select 器不起作用

Swiper 11角17 SSR Swiper断点不工作

以17角表示的自定义元素

在Drective Composure API中使用指令输出

在Angular中使用ngFor进行表乘法

Angular 16-错误NG8002:无法绑定到NGModel,因为它不是输入的已知属性

Component RegisterComponent模板出现Angular 错误

Angular 16+使用ngTemplateOutlet有条件地呈现几个模板中的一个

Ngrx Select 器返回部分对象

RxJs 中的空闲可观察对象在幕后做了什么?

如何在Cypress 测试中切换 Angular 选项卡

如何在 cypress 测试中实现拖放?

Angular 2 中的 ChangeDetectionStrategy.OnPush 和 Observable.subscribe

RxJS - .withLatestFrom 的多个来源

如何以Angular 2 获取当前路由自定义数据?

如何在angular material中使用输入类型文件

Angular2 Base64 清理不安全的 URL 值

angular4的所见即所得编辑器

交替行 colored颜色 angular material表

如何作为模块的子模块路由到模块 - Angular 2 RC 5