2016-08-03 47 views
0

我有一条路线称为家,它有三个子路线,文件,邮件和垃圾。在home路由组件中,它有一个名为'myUser'的变量。我创建了一个服务,以便它们都可以共享myUser值,但出于某种原因,服务变量值不会更改。
服务angular2 - 服务价值不变

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

@Injectable() 
export class HomeService { 
    // Mock user, for testing 
    myUser = {name:"John", loggedIn:true}; 

    setUser(name:string){ 
    this.myUser.name = name ; 
    } 

    isLogged():boolean { 
    if(this.myUser.loggedIn == true){ 
     return true ; 
    } 
    return false ; 
    } 
} 

首页(父路由)

import { Component } from '@angular/core'; 
import { Router, ROUTER_DIRECTIVES } from '@angular/router'; 
import { CORE_DIRECTIVES, FORM_DIRECTIVES } from '@angular/common'; 
import { Http, Headers } from '@angular/http'; 
import { contentHeaders } from '../common/headers'; 

import { HomeService } from '../../home.service'; 


const template = require('./home.component.html'); 
const styles = require('./home.component.css'); 

@Component({ 
    selector: 'home', 
    directives: [ CORE_DIRECTIVES, FORM_DIRECTIVES ], 
    template: template, 
    styles: [ styles ], 
    providers: [HomeService] 
}) 

export class HomeComponent { 
    constructor(public router: Router, private homeService: HomeService) { 

    } 
    myUser = this.homeService.myUser ; 

    setUser(name:string){ 
    this.homeService.setUser(name); 
    } 

    // Is logged in 
    isLogged():boolean { 
    return this.homeService.isLogged(); 
    } 
} 

邮件(子路径)

import { Component } from '@angular/core'; 
import { Router } from '@angular/router'; 
import { CORE_DIRECTIVES, FORM_DIRECTIVES } from '@angular/common'; 
import { HomeService } from '../../home.service'; 


const template = require('./mail.component.html'); 
const styles = require('./mail.component.css'); 

@Component({ 
    selector: 'mail', 
    directives: [ CORE_DIRECTIVES, FORM_DIRECTIVES ], 
    template: template, 
    styles: [ styles ], 
    providers: [HomeService] 
}) 

export class MailComponent { 
    constructor(public router: Router, private homeService: HomeService) { 

    } 

    myUser = this.homeService.myUser ; 

    setUser(name:string){ 
    this.homeService.setUser(name); 
    } 
} 

回答

2

你必须注入HomeService成依赖阵列或MainComponent提供商要么bootstrap功能这样服务将只实例化一次。

bootstrap(MainComponent, [HomeService, ....other dependency...]) 

然后从providers阵列两种组分的元数据中删除HomeService

+0

我试过这种方法,问题依然存在。 – John

+0

@John你必须从'提供者'数组中从'component'中移除'HomeService' .. –

+0

是的,当我删除提供者时,我看到了你的编辑工作。这是为什么? – John