mysql - Angular Node.js mysql 喜欢不喜欢按钮
问题描述
我正在为我的 twitter 之类的网站创建一个 YouTube 样式(喜欢-不喜欢)按钮。但是我在实现不喜欢按钮时遇到了问题,我正在使用 Angular Node.js MYSQL,带有 NgFor 循环和 ngIf 条件,我有两个表 post{post_id, user_id,description} 和 likes{like_id, user_id, post_id, like_status } 使用公共键 user_id、post_id。
如果我们在喜欢表中没有特定用户的任何值,我们如何编写条件以显示基本按钮
<div class="container" *ngFor="let post of posts; let i = index ">
<h6> {{post.description}} </h6>
<div class="row">
<div class="col-md-3">
<div *ngFor="let like of likes; ">
<div *ngIf="((post.user_id==like.user_id) && (post.post_id==like.post_id) && (like.like_status=='like'))">
<button type="button" class="btn btn-success" (click)=likeSubmit(post.user_id,post.post_id)><i class="fa fa-thumbs-up"
aria-hidden="true"></i></button>
</div>
<div *ngIf="((post.user_id==like.user_id) && (post.post_id==like.post_id) && (like.like_status=='unlike'))">
<button type="button" class="btn btn-warning" (click)=likeSubmit(post.user_id,post.post_id)><i class="fa fa-thumbs-up"
aria-hidden="true"></i></button>
</div>
<!---problem with ngIf condition -->
<div *ngIf="ngIf condition">
<button type="button" class="btn btn-basic" (click)=likeSubmit(post.user_id,post.post_id)><i
class="fa fa-thumbs-up" aria-hidden="true"></i></button>
</div>
前两个 ngIf 条件运行良好,但我无法为最后一个设置完美的 ngIf 条件,如果按钮 like_status == like,& like_status==unlike 工作良好,如果我们在 like 表中没有任何值,我们怎么写ngIf 条件 o 显示按钮
解决方案
你这样做有点不正确,你不需要在你的模板中执行内部循环,你可以在你的组件逻辑中执行两个表的连接,然后只渲染所需的数据。尝试将方法添加到连接两个表的组件中,然后您可以轻松地在模板中执行您想要的操作。例子:
TS文件
...
public getPostsWithLikes() {
this.posts.map(post => {
const like = this.likes && this.likes.find(plike => post.user_id === plike.user_id && post.post_id === plike.post_id);
return {post, like};
});
}
...
html文件
<div class="container" *ngFor="let item of getPostsWithLikes(); let i = index ">
<h6> {{item.post.description}} </h6>
<div class="row">
<div class="col-md-3">
<div *ngIf="item.like && item.like.like_status=='like'">
<button type="button" class="btn btn-success" (click)=likeSubmit(item.post.user_id,item.post.post_id)><i class="fa fa-thumbs-up"
aria-hidden="true"></i></button>
</div>
<div *ngIf="item.like && item.like.like_status=='unlike'">
<button type="button" class="btn btn-warning" (click)=likeSubmit(item.post.user_id,item.post.post_id)><i class="fa fa-thumbs-up"
aria-hidden="true"></i></button>
</div>
<!---if you don't have related record in likes table, like would be null (false), so you just need to invert it-->
<div *ngIf="!item.like">
<button type="button" class="btn btn-basic" (click)=likeSubmit(item.post.user_id,item.post.post_id)><i
class="fa fa-thumbs-up" aria-hidden="true"></i></button>
</div>
希望有帮助。
推荐阅读
- reactjs - 我如何测试这个自定义反应钩子
- concurrency - 使用并行计算的稀疏矩阵乘法
- winforms - Xtra 报告水印不显示
- reactjs - 如何在订单数组中呈现每个订单的产品数组
- android-studio - Android 模拟器应用程序在 axios 调用时出现网络错误
- linux - 如何在 ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem 的 ps 命令中获取短进程名称(cmd 参数)头
- flutter - 嗨,我是 Flutter 的新手,我使用电子邮件身份验证将我的应用程序数据存储在 Firestore 数据库中,我如何将 Facebook、移动设备无身份验证数据存储到 Firestore
- visual-studio-code - 无论如何以编程方式将 vscode 任务的输出作为 vscode 扩展
- python - 如何让 Sphinx 使用 Python 存根文件中的类型注释
- python - RuntimeError:未找到应用程序。在视图函数中工作或推送应用程序上下文