के रूप में कार्य नहीं कर रही है इसलिए मुझे TargetService
नामक एक सेवा मिली है जो विभिन्न अन्य घटकों में इंजेक्शन दे रही है। इस लक्ष्य सेवा में Targets
नामक एक संपत्ति है जो Target
ऑब्जेक्ट्स का संग्रह है।कोणीय 2 सिंगलटन सेवा सिंगलटन
मेरी समस्या यह है कि मैं चाहता हूं कि यह संग्रह दूसरे दृश्य में रूटिंग के बाद बने रहें। मेरे मार्ग ठीक काम कर रहे हैं, लेकिन जैसे ही मार्ग बदलता है, सेवा किसी भी चर की सामग्री को खो देती है, अनिवार्य रूप से, यह सेवा को फिर से शुरू करने के लिए। मेरी समझ यह थी कि इन इंजेक्शन सेवाओं को सिंगलेट्स होना चाहिए जिन्हें चारों ओर पारित किया जा सकता है?
निम्न उदाहरण में, लक्ष्य इंडेक्स पर मैं एक बटन क्लिक करता हूं जो सेवा पर Targets[]
ऑब्जेक्ट को पॉप्युलेट करता है (this.targetService.targets = ts;
)। ठीक काम करता है, फिर मैं लक्ष्यशो पेज पर जाता हूं, और उसके बाद इस सूचकांक पर वापस जाता हूं और अब यह Targets[]
संपत्ति खाली है, जब मैं इसे पहले से ही पॉप्युलेट करना चाहता हूं।
मुझे यहां क्या याद आ रही है?
App.Module
const routes: Routes = [
{ path: '', redirectTo: 'targets', pathMatch: 'full'},
{ path: 'targets', component: TargetIndexComponent },
{ path: 'targets/:id', component: TargetShowComponent }
]
@NgModule({
declarations: [
AppComponent,
TargetComponent,
TargetIndexComponent,
TargetShowComponent
],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule,
RouterModule.forRoot(routes)
],
providers: [TargetService],
bootstrap: [AppComponent]
})
export class AppModule { }
TargetService
@Injectable()
export class TargetService {
public targets: Target[];
constructor(private http: Http) {}
getTargets(hostname: String): Observable<Target[]> {
return this.http.request(`url`).map(this.extractData);
}
private extractData(res: Response) {
let body = res.json();
return body || [];
}
}
TargetIndex
@Component({
selector: 'app-targets',
templateUrl: './target-index.component.html',
styleUrls: ['./target-index.component.css'],
providers: [TargetService]
})
export class TargetIndexComponent implements OnInit {
loading = false;
constructor(private http: Http, private targetService: TargetService) {}
loadTargets(hostname: HTMLInputElement) {
this.loading = true;
this.targetService.getTargets(hostname.value)
.subscribe((ts: Target[]) => {
this.targetService.targets = ts;
this.loading = false;
})
}
ngOnInit() {
}
}
घटकों प्रदाताओं से TargetService दूर करने के लिए TargetShow
@Component({
selector: 'app-target-show',
templateUrl: './target-show.component.html',
styleUrls: ['./target-show.component.css'],
providers: [TargetService]
})
export class TargetShowComponent implements OnInit {
id: string
constructor(private route: ActivatedRoute, private targetService: TargetService) {
route.params.subscribe(params => { this.id = params['id']; })
}
ngOnInit() {
}
}
धन्यवाद श्रीमान! जब मैं एक लापता संपत्ति के बारे में करता हूं तो एटम मुझ पर शिकायत करता है, लेकिन यह ठीक से संकलित करता है और उम्मीद के अनुसार काम करता है। मुझे लगता है कि एटम टाइपस्क्रिप्ट बस थोड़ी छोटी गाड़ी है। – Cheyne