【问题标题】:Angular Node.js mysql like dislike buttonAngular Node.js mysql 喜欢不喜欢按钮
【发布时间】:2019-07-03 13:00:07
【问题描述】:

我正在为我的 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 条件我们可以写 ngIf 条件来显示按钮吗

【问题讨论】:

    标签: mysql node.js angular


    【解决方案1】:

    您这样做有点不正确,您不需要在模板中执行内部循环,您可以在组件逻辑中执行两个表的连接,然后只渲染所需的数据。尝试将方法添加到连接两个表的组件中,然后您可以轻松地在模板中执行您想要的操作。示例:

    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>
    

    希望对您有所帮助。

    【讨论】:

    • 我在 ts 文件中出现错误“阴影名称:'like'tslint(no-shadowed-variable” PostsComponent.html:23 错误类型错误:无法读取在posts.component 处未定义的属性'find' .ts:137 at Array.map () at PostsComponent.push../src/app/user/posts/posts.component.ts.PostsComponent.getPostsWithLikes (posts.component.ts:136)
    • 已编辑,所以看起来喜欢并不总是初始化,所以我在likes.find(...)之前添加了检查
    • 你能建议我其他方法吗,我仍然无法解决错误
    • 能否添加初始化likesposts字段的代码?
    • 我正在使用两个表,一个用于帖子,一个用于喜欢,以显示帖子
      {{post.description}}
      我正在使用上面的代码,并且对于每个帖子,我都会在三种状态下默认显示like按钮,like ,like 。喜欢和不喜欢上面的代码或工作正常,但我在显示默认状态时遇到错误,这意味着如果用户没有执行任何操作,所以他的数据不会存储在表中,因为我需要 ngIf 条件来表示没有数据。如果我们没有表格中的任何数据,请帮助编写 ngif 条件
    猜你喜欢
    • 2012-09-20
    • 2016-04-04
    • 2014-09-21
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2014-03-30
    相关资源
    最近更新 更多