downgradeInjectable
Вспомогательная функция, позволяющая использовать сервис Angular из AngularJS.
API
function downgradeInjectable(token: any, downgradedModule?: string): Function;
anyInjectionToken, идентифицирующий сервис, предоставляемый Angular.
stringимя пониженного модуля (если есть), которому «принадлежит» внедряемая зависимость, возвращаемое вызовом downgradeModule(). Это модуль, инжектор которого будет использоваться для создания экземпляра внедряемой зависимости.
(Этот параметр необходим только при использовании downgradeModule() для понижения более чем одного модуля Angular.)
Functionфункцию-фабрику, которую можно использовать для регистрации сервиса в модуле 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