Angular 2'de nasıl bir singleton hizmeti oluşturabilirim?


142

Önyüklemenin tüm çocukların aynı örneği paylaşması gerektiğinde enjekte etmeyi okudum, ancak ana ve başlık bileşenlerim (ana uygulama başlık bileşeni ve yönlendirici-çıkış içeriyor) her biri hizmetlerimin ayrı bir örneğini alıyor.

Facebook javascript api ve FacebookService kullanan bir UserService arama yapmak için kullandığım bir FacebookService var. İşte benim bootstrap:

bootstrap(MainAppComponent, [ROUTER_PROVIDERS, UserService, FacebookService]);

Günlük kaydımdan bootstrap çağrısı bitiyor gibi görünüyor, sonra FacebookService sonra UserService yapıcıların her biri, MainAppComponent, HeaderComponent ve DefaultComponent çalıştırmadan önce oluşturulduğunu görüyorum:

resim açıklamasını buraya girin


8
Emin misin gelmiş konum değil eklendi UserServiceve FacebookServicehiç providersbaşka bir yerde?
Günter Zöchbauer

Yanıtlar:


132

Jason tamamen haklı! Bağımlılık enjeksiyonunun çalışma şeklinden kaynaklanır. Hiyerarşik enjektörlere dayanır.

Bir Angular2 uygulaması içinde birkaç enjektör vardır:

  • Uygulamanızı önyüklerken yapılandırdığınız kök
  • Bileşen başına bir enjektör. Başka bir bileşen içinde bir bileşen kullanıyorsanız. Bileşen enjektörü ana bileşenin birinci çocuğudur. Uygulama bileşeni (uygulamanızı yeniden başlatırken belirttiğiniz bileşen) ana enjektör olarak kök enjektöre sahiptir).

Angular2 bileşen yapıcısına bir şey enjekte etmeye çalıştığında:

  • Bileşenle ilişkili enjektöre bakar. Eşleşen bir varsa, karşılık gelen örneği almak için onu kullanır. Bu örnek tembel bir şekilde yaratılmıştır ve bu enjektör için tek bir tondur.
  • Bu seviyede sağlayıcı yoksa, ana enjektöre (vb.) Bakacaktır.

Bu nedenle, tüm uygulama için tek birtona sahip olmak istiyorsanız, sağlayıcının kök enjektör veya uygulama bileşeni enjektör düzeyinde tanımlanmış olması gerekir.

Ancak Angular2, enjektör ağacına alttan bakacaktır. Bu, en düşük düzeydeki sağlayıcının kullanılacağı ve ilişkili örneğin kapsamının bu düzey olacağı anlamına gelir.

Daha fazla ayrıntı için bu soruya bakın:


1
Teşekkürler, bu iyi açıklıyor. Benim için sadece sezgiseldi, çünkü bu, açısal 2'nin kendine yeten bileşen paradigmasını kırıyor. Diyelim ki Facebook için bir bileşen kütüphanesi hazırlıyorum, ancak hepsinin tek bir hizmet kullanmasını istiyorum. Oturum açmış kullanıcının profil resmini gösteren bir bileşen ve yayınlanacak başka bir bileşen olabilir. Bu bileşenleri kullanan uygulama, hizmetin kendisini kullanmasa bile, Facebook hizmetini sağlayıcı olarak içermelidir? Sadece gerçek hizmetin singletonunu yöneten bir 'getInstance ()' yöntemiyle bir hizmete geri dönebilirim ...
Jason Goemaat

@tThierryTemplier Tam tersini nasıl yaparım, birden çok bileşene enjekte etmek ama her seferinde yeni bir örnek oluşturmak istiyorum (sağlayıcılar / yönergeler seçenekleri kullanımdan kaldırılacak ve bir sonraki sürümde kaldırılacak) ortak bir hizmet sınıfı var
Boban Stojanovski

Bu kadar aptal olduğum için özür dilerim ama benim için nasıl bir singleton hizmeti yaratıyorsun, daha detaylı açıklayabilir misin?
gyozo kudor

Bu nedenle, bir hizmetin tek bir örneğiyle çalışmak için, app.module.ts veya app.component.ts içinde sağlayıcı olarak mı bildirilmelidir?
user1767316

Her uygulamayı yalnızca app.module.ts dosyasında bildirmek, işi benim için yaptı.
user1767316

142

Güncelleme (Açısal 6 +)

Singleton hizmeti oluşturmanın önerilen yolu değişti. Şimdi @Injectabledekoratörde hizmetin 'kök' içinde sağlanması gerektiğini belirtmeniz önerilir . Bu benim için çok mantıklı ve artık modüllerinizde sağlanan tüm hizmetleri listelemeye gerek yok. Hizmetleri ihtiyacınız olduğunda içe aktarırsınız ve kendilerini uygun yere kaydederler. Ayrıca , yalnızca modül içe aktarılmışsa sağlanacak bir modül de belirtebilirsiniz .

@Injectable({
  providedIn: 'root',
})
export class ApiService {
}

Güncelleme (Açısal 2)

NgModule ile bunu yapmanın yolu, bence hizmet sınıfınızda bir 'CoreModule' oluşturmak ve hizmeti modülün sağlayıcılarında listelemek. Daha sonra ana uygulama modülünüzde, bu örneği kurucularında bu sınıfı isteyen çocuklara bir örnek sağlayacak olan çekirdek modülü içe aktarırsınız:

CoreModule.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ApiService } from './api.service';

@NgModule({
    imports: [
        CommonModule
    ],
    exports: [ // components that we want to make available
    ],
    declarations: [ // components for use in THIS module
    ],
    providers: [ // singleton services
        ApiService,
    ]
})
export class CoreModule { }

AppModule.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AppComponent } from './app.component';
import { CoreModule } from './core/core.module';

@NgModule({
    declarations: [ AppComponent ],
    imports: [
        CommonModule,
        CoreModule // will provide ApiService
    ],
    providers: [],
    bootstrap: [ AppComponent ]
})
export class AppModule { }

Orijinal Yanıt

Alanında bir sağlayıcı bootstrap()listelerseniz, bileşen dekoratörünüzde listelemenize gerek yoktur:

import { ApiService } from '../core/api-service';

@Component({
    selector: 'main-app',
    templateUrl: '/views/main-app.html',
    // DO NOT LIST PROVIDERS HERE IF THEY ARE IN bootstrap()!
    // (unless you want a new instance)
    //providers: [ApiService]
})
export class MainAppComponent {
    constructor(private api: ApiService) {}
}

Aslında sınıfınızı 'sağlayıcılar' içinde listelemek yeni bir örneği oluşturur, eğer herhangi bir üst bileşen zaten listelemişse çocukların buna gerek yoktur ve eğer yaparlarsa yeni bir örnek alırlar.


1
Şu an itibariyle (Ocak 2017), hizmeti [providers]modül dosyanızda listelersiniz bootstrap(), değil mi?
Jason Swett

5
Neden koymak değil ApiServicede AppModule's providersve bu nedenle ihtiyacını önlemek CoreModule? (@JasonSwett'in önerdiğinden emin değilim.)
Jan Aagaard

1
@JasonGoemaat Bileşende nasıl kullandığınıza örnek ekleyebilir misiniz? ApiServiceEn üste içe aktarabiliriz, ancak neden CoreModule'un sağlayıcılar dizisine koymak ve bunu app.module'ye içe aktarmak için uğraşalım ... henüz benim için tıklamadı.
hogan

Bu nedenle, modül sağlayıcısına hizmet koymak, bu modül için tek birton sağlayacaktır. Ve hizmeti Bileşen sağlayıcılarına koymak, bileşenin her örneği için yeni bir örnek oluşturur mu? Bu doğru mu?
BrunoLM

@BrunoLM Ne olduğunu göstermek için bir test uygulaması oluşturdum . TestServiceHem çekirdek hem de uygulama modüllerinde belirtilmiş olsa da , modüller için örnekler oluşturulmadığı için, bileşen tarafından sağlandığından, enjektör ağacını bu kadar yükseğe çıkarmaz. Dolayısıyla, modülünüzde bir hizmet sağlarsanız ve hiç kullanmazsanız, bir örnek oluşturulmamış gibi görünür.
Jason Goemaat

24

Açının Thierry'nin söylediği gibi hiyerarşik enjektörleri olduğunu biliyorum.

Ama burada ebeveyne enjekte etmek istemediğiniz bir kullanım durumu bulmanız durumunda başka bir seçeneğim daha var.

Bunu, hizmetin bir örneğini oluşturarak başarabiliriz.

import { provide, Injectable } from '@angular/core';
import { Http } from '@angular/core'; //Dummy example of dependencies

@Injectable()
export class YourService {
  private static instance: YourService = null;

  // Return the instance of the service
  public static getInstance(http: Http): YourService {
    if (YourService.instance === null) {
       YourService.instance = new YourService(http);
    }
    return YourService.instance;
  }

  constructor(private http: Http) {}
}

export const YOUR_SERVICE_PROVIDER = [
  provide(YourService, {
    deps: [Http],
    useFactory: (http: Http): YourService => {
      return YourService.getInstance(http);
    }
  })
];

Ve sonra bileşeninizde özel sağlama yönteminizi kullanırsınız.

@Component({
  providers: [YOUR_SERVICE_PROVIDER]
})

Hiyerarşik enjektörlere bağlı kalmadan tek bir servisiniz olmalıdır.

Bunun daha iyi bir yol olduğunu söylemiyorum, sadece birinin hiyerarşik enjektörlerin mümkün olmadığı bir sorunu varsa.


1
Meli SHARE_SERVICE_PROVIDERolmak YOUR_SERVICE_PROVIDERbileşeninde? Ayrıca servis dosyasını içe aktarmanın normal gibi gerekli olduğunu ve yapıcı hala 'YourService' türünde bir parametreye sahip olacağını varsayıyorum, değil mi? Bunu beğendim sanırım, tek bir garantiyi garanti etmenizi sağlar ve hizmetin hiyerarşiyi sağladığından emin olmanız gerekmez. Ayrıca tekil bileşenlerin sadece providerstekil sağlayıcı yerine hizmeti listeleyerek kendi kopyalarını almalarına izin verir , değil mi?
Jason Goemaat

@ JasonGoemaat haklısın. Bunu düzenledi. Tam olarak, bunu yapıcıda ve eklediğiniz bileşenin sağlayıcılarında tam olarak aynı şekilde yaparsınız YOUR_SERVICE_PROVIDER. Evet, tüm bileşenler yalnızca sunuculara ekleyerek aynı örneği alacaktır.
Joel Almeida

Bir geliştirici bunu kullandığında, "Angular'ın bu durum için sağladığı mekanizmaları kullanmayacaksam neden Angular'ı bile kullanıyorum?" Hizmetin uygulama düzeyinde sağlanması Açısal bağlamındaki her durum için yeterli olmalıdır.
RyNo

1
+1 Bu, singleton hizmetleri oluşturmanın bir yolu olmasına rağmen, yalnızca çoktonlu bir hizmet oluşturmanın bir yolu olarakinstance mülkü örneklerin anahtar-değer haritasına dönüştürerek
Prekansik

1
@RyNo Her rota için bir hizmet gerektirmeyen bir uygulama veya statik bir örnek isteyen ve aynı örneği kullanan diğer modüllerle aynı örneği kullanmak isteyen bir yeniden kullanılabilir modül düşünebilirim. Belki sunucuya web soketi bağlantısı oluşturan ve iletileri işleyen bir şey. Uygulamada yalnızca birkaç rota kullanmak isteyebilir, bu nedenle uygulama gerekli olmadığında başlatıldığında bir hizmet örneği ve web soketi bağlantısı oluşturmaya gerek yoktur. Bileşenlerin kullanıldığı her yerde hizmeti 'başlatmasını' sağlamak için bunu programlayabilirsiniz, ancak isteğe bağlı olarak tek tonlar yararlı olacaktır.
Jason Goemaat

16

Sözdizimi değiştirildi. Bu bağlantıyı kontrol et

Bağımlılıklar, bir enjektör kapsamındaki tek tonlardır. Aşağıdaki örnekte, HeroesComponent ve HeroListComponent alt öğeleri arasında tek bir HeroService örneği paylaşılmaktadır.

Adım 1. @Injectable dekoratörü ile singleton sınıfı oluşturun

@Injectable()
export class HeroService {
  getHeroes() { return HEROES;  }
}

Adım 2. Yapıcıya enjekte edin

export class HeroListComponent { 
  constructor(heroService: HeroService) {
    this.heroes = heroService.getHeroes();
  }

Adım 3. Sağlayıcıyı kaydettirin

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    routing,
    HttpModule,
    JsonpModule
  ],
  declarations: [
    AppComponent,
    HeroesComponent,
    routedComponents
  ],
  providers: [
    HeroService
  ],
  bootstrap: [
    AppComponent
  ]
})
export class AppModule { }

Sınıfım Injectablebir hizmet değilse ve yalnızca staticglobal kullanım için dizeler içeriyorsa ne olacak ?
Syed Ali Taqi

2
bu sağlayıcılar gibi: [{sağlayın: 'API_URL', useValue: ' coolapi.com '}]
Whisher

7

Ekleme @InjectableHizmete dekoratör, VE bu bir tekil yapacak Kök Modülü sağlayıcısı olarak kaydederek.


Sadece anladığımı söyle. Söylediklerini yaparsam, tamam, bu bir singleton olacak. Bunun yanı sıra, hizmet başka bir modülde de sağlayıcı ise, artık tekil olmayacak, değil mi? Hiyerarşi yüzünden.
heringer

1
Ve sağlayıcıyı sayfaların @Bileşen dekoratörüne kaydetmeyin.
Laura

@Laura. Yine de hizmeti gerçekten kullanan bileşenlere aktarıyor muyum?
Mark

@Mark Evet, içe aktarmanız gerekiyor ve daha sonra sadece bunu constructorböyle beyan etmeniz gerekiyor : import { SomeService } from '../../services/some/some'; @Component({ selector: 'page-selector', templateUrl: 'page.html', }) export class SomePage { constructor( public someService: SomeService ) { }
Laura

6

bu benim için iyi çalışıyor gibi görünüyor

@Injectable()
export class MyStaticService {
  static instance: MyStaticService;

  constructor() {
    return MyStaticService.instance = MyStaticService.instance || this;
  }
}

8
Buna Angular2 anti-pattern denir. Hizmeti doğru bir şekilde sağladığınızda Angular2 her zaman aynı örneği enjekte eder. Ayrıca bkz stackoverflow.com/questions/12755539/…
Günter Zöchbauer

3
@ Günter Zöchbauer, "Hizmeti doğru bir şekilde sunun ve Angular2 her zaman aynı örneği enjekte edecektir." ? Çünkü belirsiz ve googling ile herhangi bir yararlı bilgi bulamadım.
nowiko

Sorunuza yardımcı olabilecek bu yanıtı yeni gönderdim stackoverflow.com/a/38781447/217408 (ayrıca oradaki bağlantıya bakın)
Günter Zöchbauer

2
Bu harika. Sen gerektiğini angulars kendi bağımlılık enjeksiyon kullanın, ancak bunu olmasını bekliyoruz zaman servis bir tekil olduğu kesin olarak emin olmak için bu modeli kullanarak hiçbir zarar gelmez. Potansiyel olarak aynı hizmeti iki farklı yere enjekte ettiğiniz için böcek avlamak için çok zaman kazandırır.
PaulMolloy

Bu kalıbı, karşılaştığım sorunun hizmetin singleton olmamasından kaynaklandığını tespit etmek için kullandım
hr-tis

5

İşte Angular sürüm 2.3 ile çalışan bir örnek. Hizmetin kurucusunu bu kurucu gibi stand olarak çağırmanız yeterlidir (private _userService: UserService). Ve uygulama için bir singleton oluşturacak.

user.service.ts

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { Subject }    from 'rxjs/Subject';
import { User } from '../object/user';


@Injectable()
export class UserService {
    private userChangedSource;
    public observableEvents;
    loggedUser:User;

    constructor() {
       this.userChangedSource = new Subject<any>();
       this.observableEvents = this.userChangedSource.asObservable();
    }

    userLoggedIn(user:User) {
        this.loggedUser = user;
        this.userChangedSource.next(user);
    }

    ...
}

app.component.ts

import { Component } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { UserService } from '../service/user.service';
import { User } from '../object/user';

@Component({
    selector: 'myApp',
    templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
    loggedUser:User;

    constructor(private _userService:UserService) { 
        this._userService.observableEvents.subscribe(user => {
                this.loggedUser = user;
                console.log("event triggered");
        });
    }
    ...
}

4

A singleton service, bir uygulamada yalnızca bir örneğinin bulunduğu bir hizmettir.

Başvurunuz için tek bir hizmet sunmanın (2) yolu vardır .

  1. providedInmülkü kullanın veya

  2. modülü doğrudan AppModuleuygulamanın içinde sağlayın

Verilen kullanımı

Açısal 6.0'dan başlayarak, tek bir hizmet oluşturmanın tercih edilen yolu providedIn, hizmetin @Injectable()dekoratörünün kök dizinine ayarlanmasıdır . Bu, Angular'a hizmeti uygulama kökünde sağlamasını bildirir.

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

@Injectable({
  providedIn: 'root',
})
export class UserService {
}

NgModule sağlayıcıları dizisi

6.0'dan önceki Açısal sürümlerle oluşturulan uygulamalarda, hizmetler NgModule sağlayıcı dizileri aşağıdaki gibi kaydedilir:

@NgModule({
  ...
  providers: [UserService],
  ...
})

Bu NgModulekök AppModuleolsaydı, UserService tek bir olurdu ve uygulama genelinde kullanılabilir. Bu şekilde kodlanmış görünse providedInde, @Injectable()dekoratörün özelliğini hizmetin kendisinde kullanmak, hizmetlerinizi ağaç sallanabilir hale getirdiği için Açısal 6.0'dan itibaren tercih edilir.


3

useValueSağlayıcılarda kullanabilirsiniz

import { MyService } from './my.service';

@NgModule({
...
  providers: [ { provide: MyService, useValue: new MyService() } ],
...
})

5
useValuesingleton ile ilgili değildir. Usevalue, DI'nin çağırdığı veya DI tarafından çağrıldığında değeri döndüren bir fonksiyonun geçildiği bir Type( useClass) yerine bir değer iletmektir . Açısal DI, sağlayıcı başına otomatik olarak tek bir örneği korur. Sadece bir kez sağlayın ve bir singletonunuz var. Üzgünüz, sadece geçersiz bilgilerden newuseFactory
bahsetmek zorundayım

3

Angular @ 6'dan providedInbir Injectable.

@Injectable({
  providedIn: 'root'
})
export class UserService {

}

Dokümanları buradan kontrol edin

Açısal'da bir hizmeti tekil hale getirmenin iki yolu vardır:

  1. Hizmetin uygulama kökünde sağlanması gerektiğini bildirin.
  2. Hizmeti AppModule'a veya yalnızca AppModule tarafından içe aktarılan bir modüle ekleyin.

Açısal 6.0'dan başlayarak, tek bir hizmet oluşturmanın tercih edilen yolu, hizmetin uygulama kökünde sağlanması gerektiğini belirtmektir. Bu, hizmetin @Injectable dekoratörünün kök dizinine sağlananIn ayarlanarak yapılır:


Bu iyidir, ancak bazı öğeler bildirilerek çözülebilecek değişkenlerin bulunmamasıyla ilgili beklenmedik sorunlarınız da olabilir public static.
cjbarth

2

Hizmetinizi yalnızca app.module.ts dosyasında sağlayıcı olarak bildirin.

Benim için bu işi yaptı.

providers: [Topic1Service,Topic2Service,...,TopicNService],

sonra bir yapıcı özel parametresi kullanarak örneği başlatın:

constructor(private topicService: TopicService) { }

veya hizmetiniz html'den kullanılıyorsa, -prod seçeneği aşağıdaki hak talebinde bulunacaktır:

Property 'topicService' is private and only accessible within class 'SomeComponent'.

hizmetiniz için bir üye ekleyin ve bunu kurucuda alınan örnekle doldurun:

export class SomeComponent {
  topicService: TopicService;
  constructor(private topicService: TopicService) { 
    this.topicService= topicService;
  }
}

0
  1. Uygulama düzeyinde hizmet singletonu yapmak istiyorsanız, app.module.ts içinde tanımlamanız gerekir.

    sağlayıcılar: [MyApplicationService] (aynı şeyi alt modülde tanımlayarak o modülü spesifik hale getirebilirsiniz)

    • Bu hizmeti, singleton kavramını bozan bileşen için bir örnek oluşturan sağlayıcıya eklemeyin, yalnızca yapıcıya enjekte edin.
  2. Tek bileşenli hizmeti, bileşen oluşturma hizmetinde tanımlamak istiyorsanız, bu hizmeti app.module.ts dosyasına ekleyin ve aşağıdaki kod parçasında gösterildiği gibi belirli bir bileşenin içindeki sağlayıcılar dizisini ekleyin.

    @Component ({selector: 'app-root', templateUrl: './test.component.html', styleUrls: ['./test.component.scss'], sağlayıcılar: [TestMyService]})

  3. Açısal 6, uygulama düzeyinde hizmet eklemek için yeni bir yol sağlar. AppModule'deki sağlayıcılar [] dizisine bir hizmet sınıfı eklemek yerine, @Injectable () içinde aşağıdaki yapılandırmayı ayarlayabilirsiniz:

    @Injectable ({ProvInIn: 'root'}) ihracat sınıfı MyService {...}

"Yeni sözdizimi" bir avantaj sağlar: Hizmetler Angular (sahne arkasında) tarafından tembel olarak yüklenebilir ve yedek kod otomatik olarak kaldırılabilir. Bu, daha iyi bir performans ve yükleme hızına yol açabilir - ancak bu sadece genel olarak daha büyük hizmetler ve uygulamalar için devreye girer.


0

Yukarıdaki mükemmel cevaplara ek olarak, singletonunuzdaki şeyler hala singleton gibi davranmıyorsa eksik olan başka bir şey olabilir. Singleton'da genel bir işlevi çağırırken ve yanlış değişkenleri kullandığını tespit ederken bu sorunla karşılaştım. Sorunun, thissingletondaki herhangi bir kamu işlevi için singletona bağlı olacağı garanti edilmediği ortaya çıktı . Bu tavsiye takip ederek düzeltilebilir burada aynen böyle:

@Injectable({
  providedIn: 'root',
})
export class SubscriptableService {
  public serviceRequested: Subject<ServiceArgs>;
  public onServiceRequested$: Observable<ServiceArgs>;

  constructor() {
    this.serviceRequested = new Subject<ServiceArgs>();
    this.onServiceRequested$ = this.serviceRequested.asObservable();

    // save context so the singleton pattern is respected
    this.requestService = this.requestService.bind(this);
  }

  public requestService(arg: ServiceArgs) {
    this.serviceRequested.next(arg);
  }
}

Alternatif olarak, sınıf üyelerini bunun public staticyerine basitçe beyan edebilirsiniz public, o zaman bağlam önemli olmayacaktır, ancak SubscriptableService.onServiceRequested$bağımlılık enjeksiyonunu kullanmak ve onlara erişmek yerine onlara erişmek zorunda kalacaksınız this.subscriptableService.onServiceRequested$.


0

Ebeveyn ve çocuk hizmetleri

Bir ebeveyn hizmeti ve çocuğu ile farklı örnekler kullanarak sorun yaşıyordum. Bir örneği kullanılmaya zorlamak için üst öğeyi uygulama modülü sağlayıcılarınızdaki alt öğeye başvurularak takma adlandırabilirsiniz. Üst öğe çocuğun özelliklerine erişemez, ancak her iki hizmet için de aynı örnek kullanılır. https://angular.io/guide/dependency-injection-providers#aliased-class-providers

app.module.ts

providers: [
  ChildService,
  // Alias ParentService w/ reference to ChildService
  { provide: ParentService, useExisting: ChildService}
]

Uygulama modülleri kapsamınızın dışındaki bileşenler tarafından kullanılan hizmetler

Bir bileşen ve hizmetten oluşan bir kütüphane oluştururken, iki örneğin oluşturulacağı bir sorunla karşılaştım. Biri açısal projem, diğeri kütüphanemin içindeki bileşen. Çözüm:

my-outside.component.ts

@Component({...})
export class MyOutsideComponent {
  @Input() serviceInstance: MyOutsideService;
  ...
}

my-inside.component.ts

  constructor(public myService: MyOutsideService) { }

my-inside.component.hmtl

<app-my-outside [serviceInstance]="myService"></app-my-outside>

Kendi sorunuza cevap mı demek istediniz? Eğer öyleyse, cevabı Soru gönderildikten sonra Cevap alanına keserek / yapıştırarak StackOverflow'daki resmi bir Cevapta ayırabilirsiniz.
ryanwebjackson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.