2017-02-08 11 views
0

Моя_служба: -Как сделать сервисную функцию, которая принимает значение и возвращает наблюдаемую в Angular 2?

@Injectable() 
    export class MyService { 

     doStuff(value){ 
      //Do stuff and when done return new data 

      return newData; 
     } 

    } 

Мой компонент: -

export class MyComponent implements OnInit { 
     constructor(private _myService: MyService){} 

     ngOnInit() { 
      this._myService.doStuff(value) 
      .subscribe((data) => { 
       console.log("new data: ", data); 
      }) 
     } 
    } 

Так что мой вопрос, как я могу сделать функцию doStuff() возврата наблюдаемой. Также я хочу подписаться на указанную функцию, передавая ей значение. Как мне это сделать, пожалуйста?

У меня есть работа где я устанавливаю переменную как новый Subject() (внутри моей службы) - затем я вызываю .next() на указанную переменную и передаю значение обратно. Только вопрос, я должен назвать свою doStuff() функции, а затем подписаться на переменное что-то вроде ниже: -

Моих текущих услуг: -

@Injectable() 
    export class MyService { 
     myData:any = new Subject<any>(); 
     myDataAnnounce = this.myData.asObservable(); 

     doStuff(value){ 
      //Do stuff and when done return new data 
      this.myData.next(newData); 
     } 

    } 

Моего текущий компонент: -

export class MyComponent implement OnInit { 
     constructor(private _myService: MyService){} 

     ngOnInit() { 
      this._myService.doStuff(value); 
      this._myService.myDataAnnounce 
      .subscribe((data) => { 
       console.log("new data: ", data); 
      }) 
     } 


    } 

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

+3

'return Observable.of (newData)'? – jonrsharpe

+0

что такое прецедент здесь? – chrispy

+0

@ jonrsharpe Я чувствую, что, возможно, я подумал об этом и слишком увяз в других методах. Вы правы, я думаю :) Завтра будет проверяться дважды. Благодарю. –

ответ

1

Это довольно просто. Поскольку @jonrsharpe сказал, что вам просто нужно вернуть некоторые наблюдаемые. Иногда я использую тот же подход для отладки или быстрого запуска разработки, если я хочу начать какую-то работу без реальной службы.

@Injectable() 
export class MyService { 
    doStuff(value) { 
     // When calling to real service is implemented 
     // you can just replace this with something like 
     // return this.http.get(...).map(r => r.json()); 
     // If json response has the same structure as newData then 
     // your MyComponent will not even notice that something has changed. 
     return Observable.of(newData); 
    } 
} 

export class MyComponent implement OnInit { 
    constructor(private _myService: MyService){} 

    ngOnInit() { 
     this._myService.doStuff(value).subscribe((data) => { 
      console.log("new data: ", data); 
     }); 
    } 
} 
+0

да, я подумал, и это невероятно прямолинейно. Спасибо вам за помощь :) –