Spec-Zone.ru › Angular

downgradeInjectable

Вспомогательная функция, позволяющая использовать сервис Angular из AngularJS.

API

function downgradeInjectable(token: any, downgradedModule?: string): Function;
@paramtokenany

InjectionToken, идентифицирующий сервис, предоставляемый Angular.

@paramdowngradedModulestring

имя пониженного модуля (если есть), которому «принадлежит» внедряемая зависимость, возвращаемое вызовом downgradeModule(). Это модуль, инжектор которого будет использоваться для создания экземпляра внедряемой зависимости.
(Этот параметр необходим только при использовании downgradeModule() для понижения более чем одного модуля Angular.)

@returnsFunction

функцию-фабрику, которую можно использовать для регистрации сервиса в модуле AngularJS.

Описание

Вспомогательная функция, позволяющая использовать сервис Angular из AngularJS.

Часть библиотеки upgrade/static для гибридных приложений с поддержкой AOT-компиляции

Эта вспомогательная функция возвращает функцию-фабрику, обеспечивающую доступ к сервису Angular, идентифицируемому параметром token.

Примечания по использованию

Примеры

Сначала убедитесь, что понижаемый сервис предоставляется в NgModule, который будет частью приложения с обновлением. Например, предположим, что мы определили HeroesService

// This Angular service will be "downgraded" to be used in AngularJS
@Injectable()
export class HeroesService {
  heroes: Hero[] = [
    {name: 'superman', description: 'The man of steel'},
    {name: 'wonder woman', description: 'Princess of the Amazons'},
    {name: 'thor', description: 'The hammer-wielding god'},
  ];

  constructor(textFormatter: TextFormatter) {
    // Change all the hero names to title case, using the "upgraded" AngularJS service
    this.heroes.forEach((hero: Hero) => (hero.name = textFormatter.titleCase(hero.name)));
  }

  addHero() {
    this.heroes = this.heroes.concat([
      {name: 'Kamala Khan', description: 'Epic shape-shifting healer'},
    ]);
  }

  removeHero(hero: Hero) {
    this.heroes = this.heroes.filter((item: Hero) => item !== hero);
  }
}

и включили его в NgModule нашего приложения с обновлением

// This NgModule represents the Angular pieces of the application
@NgModule({
  declarations: [Ng2HeroesComponent, Ng1HeroComponentWrapper],
  providers: [
    HeroesService,
    // Register an Angular provider whose value is the "upgraded" AngularJS service
    {provide: TextFormatter, useFactory: (i: any) => i.get('textFormatter'), deps: ['$injector']},
  ],
  // We must import `UpgradeModule` to get access to the AngularJS core services
  imports: [BrowserModule, UpgradeModule],
})
export class Ng2AppModule {
}

Теперь мы можем зарегистрировать функцию-фабрику downgradeInjectable для сервиса в модуле AngularJS.

// Register an AngularJS service, whose value is the "downgraded" Angular injectable.
ng1AppModule.factory('heroesService', downgradeInjectable(HeroesService) as any);

В контроллере компонента AngularJS мы можем получить доступ к пониженному сервису по имени, которое указали при понижении.

// This is our top level application component
ng1AppModule.component('exampleApp', {
  // We inject the "downgraded" HeroesService into this AngularJS component
  // (We don't need the `HeroesService` type for AngularJS DI - it just helps with TypeScript
  // compilation)
  controller: [
    'heroesService',
    function (this: any, heroesService: HeroesService) {
      this.heroesService = heroesService;
    },
  ],
  // This template makes use of the downgraded `ng2-heroes` component
  // Note that because its element is compiled by AngularJS we must use kebab-case attributes
  // for inputs and outputs
  template: `<link rel="stylesheet" href="./styles.css">
          <ng2-heroes [heroes]="$ctrl.heroesService.heroes" (add-hero)="$ctrl.heroesService.addHero()" (remove-hero)="$ctrl.heroesService.removeHero($event)">
            <h1>Heroes</h1>
            <p class="extra">There are {{ $ctrl.heroesService.heroes.length }} heroes.</p>
          </ng2-heroes>`,
});

При использовании downgradeModule() пониженные внедряемые зависимости будут недоступны, пока не будет создан экземпляр модуля Angular, который их предоставляет. Чтобы избежать проблем, необходимо убедиться, что пониженные внедряемые зависимости не используются нигде за пределами той части приложения, где гарантировано создание экземпляра их модуля.

Например, допустимо использовать пониженный сервис в обновлённом компоненте, который используется только из пониженного компонента Angular, предоставляемого тем же модулем Angular, что и внедряемая зависимость. Однако недопустимо использовать его в компоненте AngularJS, который может использоваться независимо от Angular, или в пониженном компоненте Angular из другого модуля.

Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/upgrade/static/downgradeInjectable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API