【问题标题】:Pass object outside of ng-repeat在 ng-repeat 之外传递对象
【发布时间】:2018-05-20 10:45:55
【问题描述】:

所以我是 AngularJs 的新手。目前我正在尝试实现表格过滤,然后当我点击删除按钮时,它应该删除正确的对象。

这是我在过滤之前的做法:

$scope.rowIndex = -1;
$scope.selectRow = function(index) {
if (index == $scope.rowIndex)
  $scope.rowIndex = -1;
else
  $scope.rowIndex = index;
}
});

在我的 html 中:

ng-repeat="session in sessons " ng-class="{'bg-primary':rowIndex == $index }" ng-click="selectRow($index)"

现在在实现过滤之后,我发现 $index 是错误的......所以我不得不找到另一种方法......我读了一些文章,都说了同样的话......我可以将整个对象传递给函数。 .. 但是每个示例都在ng-repeat 中完成。不幸的是......我不能这样做,因为我有一个用于模态的外部 div。

那么如何将当前选定的会话/表格行传递给模态中的函数? {{ deleteSession(session) }}

<div id="deleteSessionModal" class="modal fade">
  <div class="modal-dialog">
    <div class="modal-content">
      <form>
        <div class="modal-header">
          <h4 class="modal-title">Delete Session</h4>
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        </div>
        <div class="modal-body">
          <p>Are you sure you want to delete these Records?</p>
          <p class="text-warning">
            <small>This action cannot be undone.</small>
          </p>
        </div>
        <div class="modal-footer">
          <input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel">
          <input type="submit" class="btn btn-danger" value="Delete" ng-click="deleteSession(session)">
        </div>
      </form>
    </div>
  </div>
</div>

this is how my html / table looks like

【问题讨论】:

  • 你能分享一下课程数据吗?
  • 检查以上,更新问题

标签: javascript angularjs angularjs-ng-repeat


【解决方案1】:

您可以将会话作为值传递给这样的选择行函数:

ng-repeat="session in sessons " ng-class="{'bg-primary':rowIndex == $index }" ng-click="selectRow(session)"

在函数 selectRow 中,您可以从会话中获取 Id 并将其从会话列表中删除。

【讨论】:

    【解决方案2】:

    不要将$index 传递给selectRow 函数,而是发送session.speakerId 或其他特定的会话唯一键:

    ng-click="selectRow(session.speakerId)"
    

    在您的控制器中设置/取消设置选定的会话:

    $scope.selectedSessionSpeakerId = null;
    
    $scope.selectRow = function(sess) {
      if (sess == $scope.selectedSessionSpeakerId)
        $scope.selectedSessionSpeakerId = null;
      else
        $scope.selectedSessionSpeakerId = sess;
    }
    

    你的deleteSession 函数没有接收任何参数。它只是检查选定的 Session 唯一键并将其从数组中删除:

    $scope.deleteSession = function() {
      if($scope.selectedSessionSpeakerId) {
        let index = $scope.sessions.findIndex(finction(itm) {
          return itm["speakerId"] == $scope.selectedSessionSpeakerId;
        });
        $scope.sessions.splice(index, 1);
        $scope.selectedSessionSpeakerId = null;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-28
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多