2016-11-04 73 views
0

我有一个名为ValueService的服务,其值为0. 然后我有一个导航组件和一个标题组件。 valueService中的值不会在点击时更新标题视图。我是新角色2的东西,所以我不知道如何得到这个工作。这是我到目前为止。谢谢你的帮助。Angular 2:更新服务变量和视图

增值服务

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

@Injectable() 
export class ValueService { 
value:number; 

constructor() { 
    this.value = 0; 
} 

    goTo(value){ 
    this.value = value; 
    console.log('value in service', this.value); 
    } 

导航组件模板

<button *ngFor="let d of array | keys; let i = index" (click)="valueService.goTo(i)"> {{ i }} </button> 

标题组件模板

问题就在这里。我只想显示由导航组件的按钮索引选择的h3,但无论出于何种原因,它都会保持默认值0并且不会更新该值。

<h3 *ngIf="i==valueService.value" *ngFor="let d of array | keys; let i = index"> {{ text here }} </h1> 

回答

2

您的服务和导航组件看起来不错。

您可能会遇到以下问题:在标题组件中,您有2个绑定,并且ngIf中的i未定义或未绑定到for循环。我会明确订单,看看这是否有帮助。

<template ngFor let-d [ngForOf]="array" let-i="index"> 
    <h3 *ngIf="i==valueService.value"> 
     {{ text here }} 
    </h3> 
</template> 

你也有你的H3标签与H1关闭错误,所以实际上角甚至不应该编译这个并在控制台抱怨。

+0

嗯我猜对valueService的引用是好的,否则你也会得到一个异常。您是否可以更改该组件或其父母之一的Changedetectionstrategy? – Matthias247

+0

不,我没有那样做。我认为出于某种原因,他们的兄弟组件不会随着新的价值而更新。 – LadyT

0

我最终在我的json文件中设置了一个全局变量,并且我更新了该值。它也更新了兄弟组件中的值。