Использование общего доступа к данным службы между двумя компонентами в Angular2

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

searchcomponents.ts

 bounds: any;
placesChanged() {
    var places = this.searchBox.getPlaces();

    if (places == null) return;
    if (places == undefined) return;
    if (places.length == 0) return;

    this.searchResultsSource.clear();

    this.bounds = new google.maps.LatLngBounds();
    // For each place, get the icon, name and location.
    places.forEach(this.processPlace.bind(this));

    // if the drawn result(s) is only one
    if (this.searchResultsSource.getFeatures().length == 1) {
        var singleFeature = this.searchResultsSource.getFeatures()[0];
        this.pos = singleFeature.getGeometry().getCoordinates();
        console.log(this.pos ,"hanumanh" );
        this.service.setUrlHistoryObj(this.pos);
    }

я хочу поделиться значением pos с другими компонентами. это мой служебный код

Search.services.ts

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

@Injectable()
export class SearchService {
public pos : string;
public invokeEvent:Subject<any> = new Subject<string>();
constructor() {   
this.pos="";
 }
public setUrlHistoryObj(val: string): void {
        this.pos = val;
        console.log(val);
    }
    public getUrlHistoryObj(): string {
        return this.pos;    
  }

в этом я получаю значение pos как геокоординату, и я хочу поделиться этим значением pos с другими компонентами.

Buffer.components.ts

value1: string;

constructor(
    private urlHistoryService:SearchService) {

    this.value1 = this.urlHistoryService.getUrlHistoryObj();
   // this.value1 = this.urlHistoryService.setUrlHistoryObj();

}

я получаю ошибку undefined. пожалуйста, помогите мне.


person Harshal    schedule 17.05.2017    source источник
comment
Где вы оказываете эту услугу?   -  person eko    schedule 17.05.2017
comment
@echonax Я предоставляю эту услугу в searchcomponents.ts, чтобы получить значение pos. и я хочу поделиться в Buffer.components.ts. извините, я новичок в angular. если я сделал какую-либо ошибку, пожалуйста, направьте меня.   -  person Harshal    schedule 17.05.2017
comment
Можете ли вы проверить: stackoverflow. com/questions/43997489/ и скажите мне, это та же проблема?   -  person eko    schedule 17.05.2017
comment
@echonax я не использую @NgModule, и служба является одноэлементной, я уже добавил в нее поставщиков: [SearchService].   -  person Harshal    schedule 17.05.2017
comment
Можете ли вы создать плунжер? Из вашего описания трудно сказать, что вызывает ошибку, и связано ли это с неправильным синтаксисом или законной ошибкой в ​​​​вашем потоке данных.   -  person Likwid_T    schedule 17.05.2017
comment
@user2635445 user2635445 куда ты положил providers :[SearchService]? Можете ли вы включить это в свой вопрос?   -  person eko    schedule 17.05.2017
comment
этот вопрос выглядит точно так же, как вы пытаетесь достичь. stackoverflow.com /вопросы/35273106/   -  person Likwid_T    schedule 17.05.2017
comment
@user2635445 user2635445, так как ваш сервис одноэлементный? Пожалуйста, внимательно прочитайте ссылки. Вам необходимо определить поставщика на более высоком уровне, чем эти два компонента.   -  person eko    schedule 17.05.2017
comment
пожалуйста, опубликуйте код @ngModule   -  person Likwid_T    schedule 17.05.2017
comment
Не уверен, что это ваш настоящий код, но вы ничего не можете получить от this в constructor. т.е. для BufferComponent должно быть this.value1 = urlHistoryService.getUrlHistoryObj()   -  person A. Tim    schedule 17.05.2017
comment
@Likwid_T @NgModule({ imports: [ BrowserModule, HttpModule, MaterialModule, FormsModule ], declarations: [ AppComponent, RoiCreateComponent, SearchComponent, BufferDialogComponent, ], providers: [ RoiService, ArticleService, RoiDialogService, ArticleDialogService, FacebookService, AppService, LoginService, BufferDialogService ], entryComponents: [RoiDialogComponent, ArticleDialogComponent, BufferDialogComponent], bootstrap: [AppComponent] })   -  person Harshal    schedule 17.05.2017
comment
@A.Tim, я пытался, но это не работает.   -  person Harshal    schedule 17.05.2017
comment
@user2635445 user2635445 вы применили решение, которое я дал в ссылке выше? Удалите сервис из ваших @Component и добавьте его в @NgModule.   -  person eko    schedule 17.05.2017
comment
@echonax я помещаю поставщика услуг в `@Component({ селектор: 'poi-buffer', шаблон: ` ‹ HTML-код› , providers:[SearchService], encapsulation: ViewEncapsulation.None })   -  person Harshal    schedule 17.05.2017
comment
@ user2635445, и я пытаюсь сказать тебе, что ты делаешь это неправильно.   -  person eko    schedule 17.05.2017
comment
@echonax не могли бы вы сказать мне, как сделать это правильно.   -  person Harshal    schedule 17.05.2017
comment
@ user2635445 разве ты не читаешь мои комментарии? :-)   -  person eko    schedule 17.05.2017
comment
@echonax я удаляю службы из @components и добавляю в @NgModule и все работает. большое тебе спасибо   -  person Harshal    schedule 17.05.2017
comment
@ user2635445 Рад, что смог помочь. Тогда мы должны пометить его как дубликат :-)   -  person eko    schedule 17.05.2017
comment
@echonax большое спасибо за руководство.   -  person Harshal    schedule 17.05.2017