我很难解决这个问题。我希望有人可以帮助您得出解决方案的结论。我正在使用一个聊天应用程序。我希望人们能够更新已经发出的消息。
这是聊天的html代码。
def _get_salary_rule(self):
rule = self.env['hr.salary.rule'].search([('name', '=', 'SALARY_RULE_NAME')])
return rule
当用户点击投票时,消息的等级就会更新。
component.ts
<div id="message-box-container" class="message-container">
<div class="message-box" *ngFor="let message of messages">
<div class="plus-minus">
<div class="vote-plus" (click)="vote(message.messageid, 1)">
</div>
<div class="vote-minus" (click)="vote(message.messageid, -1)">
</div>
</div>
{{message.message}} {{message.rank}}
</div>
</div>
该投票进入我的组件类,然后将其发送到我的服务类,该投票在我的节点服务器上发出。
ngOnInit() {
this.chatService.joinMainChat('');
this.chatService
.getMessages()
.subscribe((message: MessageObj) => {
this.messages.push(message);
});
}
vote(id: number, yn: number) {
this.chatService.vote(id, yn);
}
这是此操作的节点服务器代码:
public vote(id, num) {
var voted = {id: id, vote: num};
this.socket.emit('vote', voted);
}
现在,投票方面可以在后端使用。正确的消息正在获得正确的投票。
问题在于前端html代码未更新消息的排名。
老实说,我不知道该怎么做,我也无法解决这个问题。
我希望返回新等级并用新等级更新指定的消息。我只是不确定如何执行此操作。任何帮助将不胜感激。
答案 0 :(得分:1)
据我了解,在服务器端,您并没有单独维护投票,您只是在添加现有投票以及来自前端的新投票。为了能够更新发出的消息,您的服务器必须知道旧投票中提供的是旧投票。因此,要实现更新发出的投票,您的客户必须提供旧投票以及要更新的新投票,以便服务器可以减去旧投票并添加新投票。
下面是您需要在angular中添加的客户端额外类。
public vote(id, oldNum, newNum) {
var voted = { id: id, oldVote: oldNum, newVote:newNum };
this.socket.emit('updateVote', voted);
}
此服务的调用方式与发送新投票的方式相同,但需要提供oldVote
和newVote
。
下面是服务器端代码,用于接受对发出的投票进行的此编辑。在这里,您需要再添加一个事件监听器,以编辑发出的投票。
socket.on('updateVote', (ballet) => {
messageList[ballet.id].rank -= ballet.oldVote;
messageList[ballet.id].rank += ballet.newVote;
io.to('main room').emit('new-message', messageList[ballet.id]);
});
在代码上方,减去已发出的投票并添加新的投票。