2017-04-15 72 views
0

我有在组件1中计算的属性,我正在使用服务来访问和存储该属性,并从另一个组件访问该属性值,但该值不反映在另一个组件中。我做错了什么通过角度2中的多个组件访问服务的属性?

组件1

import { Component, AfterViewInit } from '@angular/core'; 
import { CrosspropertiesService } from "../services/Crossproperties.service"; 
@Component({ 
    selector: 'app-timer', 
    templateUrl: './timer.component.html', 
    styleUrls: ['./timer.component.css'], 
    providers:[CrosspropertiesService] 
}) 
export class TimerComponent implements AfterViewInit { 
    constructor(private crossproperties: CrosspropertiesService) { } 
    public projectheader: number = 959 ;//lets assume 
    ngAfterViewInit() { 
    this.projectheader = this.crossproperties.projectHeaderWidth; 
    console.log(this.crossproperties.projectHeaderWidth);// console has value 959 
    } 

    } 

} 

组件2

import { Component, AfterViewInit, Input } from '@angular/core'; 
    import { CrosspropertiesService } from "../../services/Crossproperties.service"; 
    @Component({ 
     selector: 'app-projects', 
     templateUrl: './projects.component.html', 
     styleUrls: ['./projects.component.css'], 
     providers:[CrosspropertiesService] 
    }) 
    export class ProjectsComponent implements AfterViewInit { 

     constructor(private crossproperties: CrosspropertiesService) { } 

     public headerWidth :number; 
     ngAfterViewInit() { 
     this.headerWidth= this.crossproperties.projectHeaderWidth; 
     console.log(this.headerWidth); //console has value undefined 
     } 

和服务文件

import { Injectable } from '@angular/core'; 
@Injectable() 
export class CrosspropertiesService { 
    public projectHeaderWidth:number; 
    constructor() { } 
} 
+0

这些组件加载为兄弟路线?如果父路线不同,您的应用程序将重新加载并丢失内存 –

+0

而在组件1中,“this.crossproperties.projectHeaderWidth”如何给出959?不应该表达式是:'this.crossproperties.projectHeaderWidth = this.projectheader'? –

+0

是的,这是什么@yurzui已经提到 –

回答

1

如果您在组件上向providers数组添加服务,则每个组件都有自己的实例服务。

从组件中移除providers属性,并将其添加到父组件或NgModule

@NgModule({ 
    ... 
    providers: [CrosspropertiesService] 
}) 
export class AppModule {} 
+0

是的,一开始我把服务提供商在ngmodule,但它编译时警告说'有多个模块名称仅在套管中不同。 当使用其他大小写语义编译文件系统时,这可能会导致意外的行为 使用相等的大小写。比较这些模块标识符: –

+0

检查您的导入。总是使用像'cross-properties.service'这样的小写字母参见https://github.com/AngularClass/angular2-webpack-starter/issues/926 – yurzui

+0

ooh非常感谢你,这是一个愚蠢的错误 –