【问题标题】:Setting a value of an item in ng-repeat (firebase, angular)在 ng-repeat (firebase, angular) 中设置项目的值
【发布时间】:2016-05-10 03:41:44
【问题描述】:

所以,我在 Firebase 中有一些消息,包括 textautherlike。我会用 ng-repeat 遍历它们:

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

我想添加一个按钮来diss/like消息。我尝试了各种各样的东西,没有一个奏效。我希望能找到类似的东西:

<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>

我也尝试将消息传递给函数,但也 - 没有工作:\

【问题讨论】:

    标签: angularjs firebase angularjs-ng-repeat angularfire


    【解决方案1】:

    好的,所以我对 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);
    };
    

    【讨论】:

      【解决方案2】:

      我想你想在运行时在喜欢和不喜欢按钮之间切换。请参阅下面的内容。 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>
      

      【讨论】:

      • 您好,谢谢!按钮上的文本确实按我的意愿更改,但数据库中的数据没有更新...
      【解决方案3】:

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

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

      在你的控制器中:

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

      【讨论】:

      • 感谢您的回答,但按钮上的文本没有更新,数据库中的数据也保持不变。
      • 你需要一些 firebase 调用来更新数据库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多