在我的Angular App

时间:2017-10-31 23:59:18

标签: javascript angular observable

我最近遇到了一个问题,此时无法弄清楚我的代码有什么问题,希望有人可以帮助我。

我要做的就是用功能改变BehaviorSubject的价值,但它还没有结束。

chat.service.ts

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

@Injectable()
export class ChatService {
  chatId = new BehaviorSubject<number>(0);

  constructor() {
    this.chatId.next(1);
  }

  changeChatId(chatId: number) {
    console.log(chatId);
    this.chatId.next(chatId);
  }
}

因此,订阅者从构造函数中获取默认值以及更改的chatId。但是当我尝试使用 changeChatId 函数更改它时,根本没有任何事情发生。正确的id会被传递到我已经调试过的函数中,但是行 this.chatId.next(chatId)似乎没有做任何事情。

添加

这些是当前使用该服务的其他组件。

聊天消息列表

import { Component, OnInit, Input} from '@angular/core';
import { ChatService } from "../../../shared/services/chat.service";

@Component({
  selector: 'app-chat-message-list',
  templateUrl: './chat-message-list.component.html',
  styleUrls: ['./chat-message-list.component.css'],
  providers: [ChatService]
})
export class ChatMessageListComponent implements OnInit {
  chatId: number;

  constructor(private chat: ChatService) { }

  ngOnInit() {
    this.chat.chatId.subscribe(
      chatId => this.updateMessageList(chatId)
    );
  }

}

聊天项

import { Component, OnInit, Input} from '@angular/core';
import { User } from '../../../shared/models/user.model';
import { ChatService } from '../../../shared/services/chat.service';

@Component({
  selector: 'app-chat-list-item',
  templateUrl: './chat-list-item.component.html',
  styleUrls: ['./chat-list-item.component.css'],
  providers: [ChatService]
})
export class ChatListItemComponent implements OnInit {
  @Input() 
  user: User;

  constructor(private chat: ChatService) { }

  ngOnInit() {
  }

  onChatItemSelected(){
    this.chat.changeChatId(this.user.id);
  }
}

1 个答案:

答案 0 :(得分:1)

您需要将ChatService设为单件(共享)服务。将其添加到ngModule的提供程序。这允许使用ChatService的所有组件共享相同的服务实例。

@NgModule({
    providers: [ChatService]
})

将其从组件提供商处删除。当您将其添加到组件提供程序时,该组件将获得其自己的ChatService实例,而其他组件无法使用该实例。