Впрысните поставщика в корневой инжектор в angular 1 angular 2 hybrid app

Я разрабатываю гибридное приложение ng1 ng2. Приложение основано на ng1, затем, используя адаптер обновления, я понижаю компоненты ng2.

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

Есть ли способ, чтобы эти компоненты могли совместно использовать один экземпляр поставщика без использования родительского компонента ng2?

1 ответ

  1. Edit: answer устарел, так как выпуск rc5 вы должны использовать NgModule для этого.

    Просто используйте addProviderметод UpgradeAdapter.

    Вот так:

    import { UpgradeAdapter } from '@angular/upgrade';
    import { YourService} from "./YourService";
    
    const upgradeAdapter = new UpgradeAdapter();
    upgradeAdapter.addProvider(YourService);
    

    После YourServiceтого, как это добавлено в корневой инжектор, и вам не нужно указывать его в других компонентах или службах:

    @Component({
        selector: 'cmp-selector',
        template: '...',
        // Don't specify YourService again or you will receive another instance
        // providers: [YourService] 
    })
    export class SomeComponent {
        constructor(private service: YourService) {}
    }