1

好的,所以我的问题是我认为我有以下设置:

<a class="like" ng-tap="likeClicked()"><span>{{isLiked}}</span></a>

此外,我还有另一个关键的视图元素:

<span class="like-count" ng-tap="viewLikes()" ng-init="likeCount=feed.likes.length"{{likeCount}}</span>

然后是我的控制器,我有以下代码:

$scope.likeClicked = function () {

    console.log($scope.feeds);

    if (!hasLiked) {
      hasLiked = true;
      $scope.isLiked = 'Unlike';
    } else {
      hasLiked = false;
      $scope.isLiked = 'Like';         
    }
  };

最后,一些虚拟的 JSON:

  {
    "id":5,
    "title":"Feed 1",
    "createdby":1,
    "typeId":2,
    "content":"Lorem ipsum dolor sit amet, consectetur adipisicing elit,",
    "createdon":"2013-03-21 14:53:35",
    "editedon":"2013-03-21 14:53:35",
    "comments": [
      {
        "id": 0,
        "createdby": 5,
        "content": "Lorem ipsum dolor sit amet, consectetur adipisicing elit,",
        "createdon":"2013-03-21 14:53:35"
      }
    ],
    "likes": [
      {
        "id": 11,
        "createdby": 4,
        "createdon":"2013-03-21 14:53:35"
      },
      {
        "id": 13,
        "createdby": 2,
        "createdon":"2013-03-21 14:53:35"
      }
    ]
  }

我想要实现的是,当用户点击时likeClicked,喜欢“喜欢”(尽管这有点有效)。然后一旦喜欢,我需要获取与.length该提要项关联的 JSON 子项中的数组。问题来了,我可以使用控制台日志返回控制台中的对象console.log($scope.feeds);,但是,如果我使用console.log($scope.feeds.likes);,这将返回未定义,即使它是数组和$scope单击元素中的可用对象。

例如,我不想指定 JSON 的特定子项console.log($scope.feeds[3});,因为如果我可以根据ng-repeat单击的项目动态设置子项会更好。

那里有任何 Angular 坏蛋,请帮忙!

谢谢,

J.P

4

1 回答 1

0

要针对单个提要实例,您可以使用 ng-repeat 公开的属性 $index 并将其传递给 likeClicked() 方法。

<article ng-repeat="feed in feeds">
    <h3>{{feed.createdby}}</h3>
    <p>{{feed.content}}</p>
    <button ng-click="likeClicked($index)">{{isLiked}}</button>
</article> 

知道索引后,您可以单独跟踪每个提要/点赞,举个例子,我创建了一个对象 (isLiked) 来保存这些数据。

要更改按钮的文本,我将使用基于存储在 isLike 对象中的值的过滤器。

这是一个 plunker http://plnkr.co/edit/OJmSFIppizpTtUiOcqxD?p=preview

于 2013-04-22T17:49:40.743 回答