这个问题是基于https://github.com/ParthibanRajalingam/demos中的一个例子.

Only the initial values of the stock object are displayed using app.component.html: enter image description here

    <div class="card" *ngIf="stock$ | async; let stock">
  <div class="textBox">
    <div class="textContent">
        <div class="h1">{{stock.name}}<div *ngIf="stock.increased"
          style="color: green ; margin: 0 10px 0 10px; float: right;">▲</div>
        <div *ngIf="!stock.increased" style="color: red ; margin: 0 10px 0 10px; float: right;">▼</div>
      </div>
    </div>
    <div class="detail">Price: ${{stock.price}}   
    </div>
  </div>
</div>

The app.component.ts uses BehaviorSubject and Observable from rxjs:

private webSocket: WebSocket;
private subscription: Subscription = Subscription.EMPTY; 
public stock: Stock = new Stock();
public stockSubject: BehaviorSubject<Stock> = new BehaviorSubject<Stock>(this.stock);
public stock$: Observable<Stock> = this.stockSubject.asObservable();

this.webSocket = new WebSocket('ws://localhost:8080/stocks');
this.subscription = this.stock$.subscribe();
        
this.webSocket.onmessage = (event) => {
    this.stock = JSON.parse(event.data.toString());
    this.stockSubject.next(this.stock);
    console.log(JSON.stringify(this.stock));
};  

The Stock object has public attributes to avoid using the any type:

export class Stock {
  name: string;
  icon: string;
  price: number;
  increased: boolean;
  
  constructor () {
    this.name = 'Amazon';
    this.icon = '';
    this.price = 0;
    this.increased = false;
  }
}

ANGLE应用程序是一个Web服务客户端,它接收更新的股票价格并在BehaviorSubject上调用next:

{"name":"Amazon","icon":"https://cdn.cdnlogo.com/logos/a/77/amazon-dark.svg","price":12.17,"increased":false}
{"name":"Amazon","icon":"https://cdn.cdnlogo.com/logos/a/77/amazon-dark.svg","price":12.72,"increased":true}
{"name":"Amazon","icon":"https://cdn.cdnlogo.com/logos/a/77/amazon-dark.svg","price":12.71,"increased":false}

在HTML页面上显示更新的股票属性缺少什么?最初的例子没有使用对象或观察物,对作者来说是有效的.

推荐答案

请找到下面的工作实例供您参考!

article

import { CommonModule } from '@angular/common';
import { Component } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import { BehaviorSubject, map, Observable, Subscription, interval } from 'rxjs';
import 'zone.js';
import { Stock } from './stock.model';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule],
  template: `
    <div class="card" *ngIf="stock$ | async as stockData">
      <div class="textBox">
        <div class="textContent">
            <div class="h1">{{stockData.name}}<div *ngIf="stockData.increased"
              style="color: green ; margin: 0 10px 0 10px; float: right;">▲</div>
            <div *ngIf="!stockData.increased" style="color: red ; margin: 0 10px 0 10px; float: right;">▼</div>
          </div>
        </div>
        <div class="detail">Price: $ {{stockData.price}} </div>
      </div>
    </div>
  `,
})
export class App {
  // private webSocket: WebSocket;
  public stock: Stock = new Stock();
  public stockSubject: BehaviorSubject<Stock> = new BehaviorSubject<Stock>(
    this.stock
  );
  public stock$: Observable<Stock> = this.stockSubject.asObservable();

  // this.webSocket = new WebSocket('ws://localhost:8080/stocks');
  // this.subscription = this.stock$.subscribe();

  ngOnInit() {
    interval(1000)
      .pipe(
        map(() => ({
          data: {
            name: 'Amazon',
            increased: Math.random() < 0.5,
            price: Math.floor(Math.random() * 100) + 1,
          },
        }))
      )
      .subscribe(this.onmessage);
  }

  onmessage = (event: any) => {
    this.stock = event.data;
    this.stockSubject.next(this.stock);
  };
}

bootstrapApplication(App);

stackblitz

Javascript相关问答推荐

我试图实现用户验证的reduxstore 和操作中出了什么问题?

jQuery提交按钮重新加载页面,即使在WordPress中使用preventDefault()

. NET中Unix时间转换为日期时间的奇怪行为

角色 map 集/spritebook动画,用户输入不停止在键上相位器3

分层树视图

为什么按钮会随浮动属性一起移动?

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

用于编辑CSS样式的Java脚本

如何从HTML对话框中检索单选项组的值?

在运行时使用Next JS App Router在服务器组件中运行自定义函数

映射类型定义,其中值对应于键

同一类的所有div';S的模式窗口

如何修复使用axios运行TSC index.ts时出现的错误?

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

按特定顺序将4个数组组合在一起,按ID分组

我的NavLink活动类在REACT-ROUTER-V6中出现问题

设置复选框根据选中状态输入选中值

更新文本区域行号

是否有静态版本的`instanceof`?

如果未定义,如何添加全局变量