在 ng-repeat 中设置一个项目的值 (firebase, angular)

Setting a value of an item in ng-repeat (firebase, angular)

所以,我在 Firebase 中有一些消息,textautherlike。我将使用 ng-repeat 复习它们:

<li ng-repeat="message in messages">

我想为 diss/like 消息添加一个按钮。我尝试了各种方法,none 成功了。我希望找到类似的东西:

<span ng-if="message.like"><button ng-click="message.$setValue({like: !message.like})">Disslike Message</button></span>
<span ng-if="!message.like"><button ng-click="message.$setValue({like: !message.like})">Like Message</button></span>

我也尝试将消息传递给一个函数,但也没有成功:\

解决这个问题的通常方法是调用控制器函数,使用 $index 魔法变量(代表当前项目的索引)——而不是在对象上存储函数来修改自身:

<button ng-click="invertLike($index)">

在你的控制器中:

$scope.invertLike = function (index) {
  messages[index].like = !messages[index].like;
};

我想你想在运行时在喜欢和不喜欢按钮之间切换。请参阅下文以执行此操作。 JSFiddle 供参考 - Demo 希望这对您有所帮助!

<body ng-app="SampleApp">
  <table ng-controller="myController" border="1px">
    <thead>
      <tr>
        <td>text</td>
        <td>author</td>
        <td>like/dislike button</td>
      </tr>
    </thead>
    <tbody ng-repeat="message  in messages">
      <tr>
        <td>{{message.text}}</td>
        <td>{{message.author}}</td>
        <td>
          <button ng-click="message.like = !message.like">
            <span ng-show="message.like">Like Button</span>
            <span ng-show="!message.like">Dislike Button</span>
          </button>

        </td>
      </tr>
    </tbody>
  </table>
</body>

好的,所以我对 Sumit 和 Ven 的答案进行了一些混合和匹配。 谢谢两位!

在html中:

<button ng-click="message.like = !message.like; invertLike($index)">
    <span ng-show="!message.like">Like Button</span>
    <span ng-show="message.like">Dislike Button</span>
</button>

在控制器中:

$scope.invertLike = function(index) {
    $scope.messages.$save(index);
};