Javascript 在嵌套数组上使用ng if显示图标

Javascript 在嵌套数组上使用ng if显示图标,javascript,angularjs,angular-ng-if,ng-filter,Javascript,Angularjs,Angular Ng If,Ng Filter,这个有问题 我想检查一个用户是否已经为一篇文章添加了书签。如果有,我会显示一个添加的书签图标 <div ng-repeat="post in posts> <div ng-repeat="book in userbookmarks"> <div ng-if="book.post.id === post.id"> <i class="material-icons"> bookmark_border

这个有问题

我想检查一个用户是否已经为一篇文章添加了书签。如果有,我会显示一个添加的书签图标

<div ng-repeat="post in posts>
<div ng-repeat="book in userbookmarks">
    <div ng-if="book.post.id === post.id">
        <i class="material-icons">
            bookmark_border
        </i>
        Added
    </div>
</div>
</div>
我尝试了一些使用ternaries和ng if的方法,但未能返回所需的行为。我的直觉是使用过滤器检查book.post数组中是否存在post.id。然后在模板中使用ng if,但是我还不能做到这一点。我是新来的,非常感谢您的帮助


*为清晰起见,请编辑。这与模板显示有关,如果post.id位于书签的用户数组中,我希望在模板显示中显示bookmark_border。如果book.post.id不在用户的bookmarks数组中,我希望显示书签,并让用户能够添加bookmark()

以下是一种可能的解决方案:

你的模板在你的文章中循环,检查每一篇文章是否在书签文章的用户列表中。如果是,您将看到一个添加的文本,否则您将看到一个书签按钮

    <div class="post" *ngFor="let post of posts">
       {{post.Text}}
      <div class="bookmark-button" *ngIf="!isBookmarked(post.Id)" (click)="addBookmark(post)">Bookmark</div>
      <div class="bookmark-button" *ngIf="isBookmarked(post.Id)">Added!</div>
    </div>

{{post.Text}
书签
补充!
在组件中,您有帖子列表、用户和用于检查用户是否有给定帖子以及添加该帖子的函数:

  user = {
      bookmarks: [];
    }

    posts = [
      {
        Id: 1,
        Text: "Woot Woot"
      },
      {
        Id: 2,
        Text: "Angular 4 the win!"
      },
      {
        Id: 3,
        Text: "Awesomesauce"
      }  
    ]

    addBookmark(post) {
      if(!this.isBookmarked(post.Id))
        this.user.bookmarks.push(post.Id);
    }

    isBookmarked(id){
      for(var i = 0; i < this.user.bookmarks.length; i++){
        if(this.user.bookmarks[i] === Number(id)){
          return true;
        }
      }
      return false;
  }
用户={
书签:[];
}
职位=[
{
Id:1,
文字:“呜呜呜”
},
{
Id:2,
文字:“胜利!”
},
{
Id:3,
文字:“令人敬畏的酱汁”
}  
]
添加书签(post){
如果(!this.isBookmarked(post.Id))
this.user.bookmarks.push(post.Id);
}
已添加书签(id){
for(var i=0;i
这里有一个小插曲:

您能否在上下文中显示这两个页面的html内容(与此处单独显示的内容相比)。另外,请展示
book
对象的外观。book和post的数据结构是什么?它们之间的关系如何?您能告诉我更多关于您的结构的信息吗?我不确定我是否了解您的意思。你是说有一个帖子列表,用户有一个书签帖子列表吗?书签按钮在帖子中,你点击它,希望它能更新用户界面,以反映现在添加到用户书签中的书签?为clarityAwesomesauce编辑这是我需要的99%。但是我遇到了麻烦,因为书签id是嵌套的数组,其中包含书签id,然后是嵌套的帖子id。例如
bookmark:[id:1][post:id:3,text:“Awesomesauce”]
我似乎无法访问它来比较post.id==嵌套的post.idNevermind,用这个
For(var I=0;I
需要对索引数组进行刷新。请将以上标记为正确。
    <div class="post" *ngFor="let post of posts">
       {{post.Text}}
      <div class="bookmark-button" *ngIf="!isBookmarked(post.Id)" (click)="addBookmark(post)">Bookmark</div>
      <div class="bookmark-button" *ngIf="isBookmarked(post.Id)">Added!</div>
    </div>
  user = {
      bookmarks: [];
    }

    posts = [
      {
        Id: 1,
        Text: "Woot Woot"
      },
      {
        Id: 2,
        Text: "Angular 4 the win!"
      },
      {
        Id: 3,
        Text: "Awesomesauce"
      }  
    ]

    addBookmark(post) {
      if(!this.isBookmarked(post.Id))
        this.user.bookmarks.push(post.Id);
    }

    isBookmarked(id){
      for(var i = 0; i < this.user.bookmarks.length; i++){
        if(this.user.bookmarks[i] === Number(id)){
          return true;
        }
      }
      return false;
  }