angular - 将组件中的数据绑定到服务返回视图 - Angular
问题描述
我正在使用 angular 8,并且items
在我的组件文件mycomponent.ts
中调用了一个变量,该变量绑定到我的 HTML,如下所示。
我的 HTML
<div cdkDropList [cdkDropListData]="items">
<div *ngFor="let item of items" cdkDrag [cdkDragData]="item" (click)="onClick(item)">
.......
</div>
</div>
同样在该组件文件中,它具有如下功能。
msgFrmServer(update) {
this.items = update;
}
在服务文件myservice.ts
中,我有以下代码来调用此函数。
myComponent.msgFrmServer(update);
msgFrmServer
我在组件 ts 文件中调用该函数的位置。
变量在方法内部没有问题的情况下得到更新,但视图没有得到更新。这是一个 websocket 应用程序,我从服务器获取更新,并且每次有更新时服务类都会调用组件 ts 文件中的函数。
我可以在组件 ts 中移动服务类函数,然后一切正常。但这看起来是一个糟糕的设计理念。我想将我的服务分开并使其正常工作。有人可以帮我吗?我是 Angular 的新手,我可能缺少 Angular 中可以轻松处理这个问题的一些好功能。
解决方案
如果您使用 websocket,则可以使用 rxjs 在您的服务中构造 WebSocketSubject(如下面的 stackblitz 示例中的 my-test.service )。然后你可以在你的组件中订阅它。如果您的 websocket 收到新消息,则调用 subsription 中的下一个函数,然后您可以在组件中调用您想要的任何函数。
服务示例:
import { Injectable } from "@angular/core";
import { webSocket, WebSocketSubject } from "rxjs/webSocket";
@Injectable()
export class MyTestWebsocketService {
myWebSocket: WebSocketSubject<any>;
constructor() {
this.myWebSocket = webSocket({
url: "ws://xxxxx/"
});
}
getWebSocket() {
return this.myWebSocket;
}
}
组件示例:
import { Component, OnInit } from "@angular/core";
import { MyTestService } from "../my-test.service";
@Component({
selector: "app-my-component",
templateUrl: "./my-component.component.html",
styleUrls: ["./my-component.component.css"]
})
export class MyTestComponent implements OnInit {
constructor(private myTestService: MyTestService) {}
items: any;
ngOnInit() {
this.myTestService.getWebSocket().subscribe(
msg => {
this.msgFrmServer(msg);
}, // Called whenever there is a message from the server.
err => console.log(err), // Called if at any point WebSocket API signals some kind of error.
() => console.log("complete") // Called when connection is closed (for whatever reason).
);
}
msgFrmServer(update) {
this.items = update;
}
}
推荐阅读
- python - 在 Python 中,在文本文件中搜索多个单词并打印相应的行
- javascript - 使会话重新生成可用于护照的所有登录策略方法
- reactjs - 如何使用 React 在 Kendo 网格标题中显示图像或其他任何内容
- android - 在 onLoadFailed() 时滑动使用默认图像
- angular - 为什么角度订阅多次?
- android - Android 应用 facebook 从 v2.6 升级到 v3.0
- ionic-framework - 如何在带有 higcharts 的 ionic 中添加绘图功能?
- android - 如何调试“java.lang.NoClassDefFoundError”?
- c# - 如何使类泛型以在 C# 中传递动态属性类
- angular - 过滤所选数据