簡體   English   中英

全局服務在angular2中不起作用

[英]global service not working in angular2

我在angular2中創建了一個全局服務,用於跨所有組件訪問變量,如下所示。

global.objects.service.ts

import {Http} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/share';

export class GlobalObjectsService {
  workspace:any;     
  constructor() {    
  }  
}

然后,我可以在我的workspace.component訪問並為該對象設置新值,如下所示:

import {Component, OnInit,Input} from 'angular2/core';
import { GlobalService} from './../../../app/shared/services/global/global.service';
import { GlobalObjectsService} from './../../shared/services/global/global.objects.service';
import { WorkspaceService } from './../../../app/shared/services/pm/workspaces.service';   

@Component({
    selector: 'workspaces',
    providers:[WorkspaceService],        
    templateUrl: 'app/project-manager/workspaces/workspaces.component.html'
})

export class WorkspacesComponent implements OnInit {
    @Input() workspaces:any;    
    constructor(private globalService:GlobalService,private globalObjectsService:GlobalObjectsService,private workspaceService:WorkspaceService) { }

    ngOnInit() { }    
    selectWorkspace(workspace_id:string){
       this.workspaceService.getWorkspaceById(workspace_id,this.globalService.baseUrl).subscribe((workspace)=>{
           this.globalObjectsService.workspace=workspace; 
           console.log(this.globalObjectsService.workspace);  //this prints workspace correctly        
       });           
    }    
}

但是當我嘗試在下面的組件中訪問此全局對象時,其顯示undefined

import {Component, OnInit ,Input} from 'angular2/core';
import { GlobalObjectsService} from './../../shared/services/global/global.objects.service';
@Component({
    selector: 'pages',    
    templateUrl: 'app/project-manager/pages/pages.component.html'
})
export class PagesComponent implements OnInit {
    @Input() pages:any;
    public workspace:any;    
    constructor(private globalObjectsService:GlobalObjectsService) {
        this.workspace=this.globalObjectsService.workspace; 
        console.log(this.workspace);  //this is not working           
    }
    ngOnInit() { }        
}

在引導時,我沒有在根組件之外的任何組件的providers中包含global.objects.service

有什么建議么?

您的服務缺少@Injectable()指令。 像這樣添加它:

import {Injectable} from 'angular/core';
import {Http} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/share';

@Injectable()
export class GlobalObjectsService {
  workspace:any;     
  constructor() {    
  }  
}

此處閱讀有關Angular 2中的依賴項注入的更多信息

似乎您缺少的是將WorkspaceService注入GlobalObjectsService

@Injectable()
export class GlobalObjectsService {
  constructor(public workspace:WorkspaceService) {    
  }  
}

您需要提供WorkspaceService類的GlobalObjectsService 全局GlobalObjectsService不能注入更多本地WorkspaceService具體取決於您在哪里注入GlobalObjectsService

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM