angular(1.x)-以编程方式从代码访问ng repeat

fruv7luv  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(276)

我正在尝试为仍然使用angular 1.x的旧项目设置热键,我尝试添加的功能之一是从使用angular 1.x创建的表中选择第一行 NG-REPEAT . 我已经能够添加其他功能,例如向上/向下移动所选行,因为我在上传递所选行 ng-click="setSelected(this)" 这样我就可以保存行并使用 selectedRow.$$prevSibilingselectedRow.$$nextSibiling .
我现在很难弄清楚的是我该如何设置 selectedRow 从控制器。
下面是一个简单的例子:
http://plnkr.co/edit/6jphlywkgf5rarwt?open=lib%2fscript.js
js:

App.controller('ActivitiesCtrl', [function() {
  var vm = this;
  vm.selectedRow = "Not set";
  vm.activities = [
    {
      "id": 1,
      "code": "ABC",
      "person": "Joe"
    },
    {
      "id": 2,
      "code": "DFF",
      "person": "Sally"
    },
    {
      "id": 3,
      "code": "ABC",
      "person": "Sue"
    },
    {
      "id": 4,
      "code": "124",
      "person": "Sam"
    },
  ];
  vm.setSelected = function(row) {
    vm.selectedRow.selected = false;
    vm.selectedRow = row;
    vm.selectedRow.selected = true;
  }
  vm.moveNext = function() {
    vm.setSelected(vm.selectedRow.$$nextSibling)
  }
  vm.setFirst = function() {
    vm.setSelected("How do I set it...");
    // How to set it? vm.setSelected(?????)
  }
}]);

html:

<div ng-controller="ActivitiesCtrl as vm">
  <table>
    <thead>
      <th>Id</th>
      <th>Code</th>
      <th>Person</th>
    </thead>
    <tbody>
      <tr ng-repeat="activity in vm.activities track by activity.id" ng-click="vm.setSelected(this)" ng-class="{info: selected}">
        <td>{{activity.id}}</td>
        <td>{{activity.code}}</td>
        <td>{{activity.person}}</td>
      </tr>
    </tbody>
  </table>
{{vm.selectedRow | json}}
<hr />
<button ng-click="vm.setFirst()">Set First</button>
<button ng-click="vm.moveNext()">Next</button>
</div>
cgh8pdjw

cgh8pdjw1#

可以通过将数组中的实际对象设置为selectedrow而不是使用 this 并通过检查 selectedRow === activity 在ng课上。
这种方法不需要改变对象

<tr
    ng-repeat="activity in vm.activities track by activity.id"
    ng-click="vm.setSelected(activity)"
    ng-class="{info: vm.selectedRow == activity}"
>

然后可以使用数组#findindex()获取数组中当前的selectedrow索引,如果存在下一个索引,则使用它或返回第一个索引。
对于 setFirst() 你只要使用 vm.activities[0] ```
vm.selectedRow = null;

vm.setSelected = function (row) {
vm.selectedRow = row;
};

vm.moveNext = function () {
const {selectedRow:curr, activities:act} = vm;
if (curr !== null) {
let idx = act.findIndex(e => e == curr) + 1;
let next = act[idx] || act[0];
vm.setSelected(next);
}
};

vm.setFirst = function () {
vm.setSelected(vm.activities[0]);
};

工作打捞器
z9ju0rcb

z9ju0rcb2#

下面是与测试工作示例的链接。

enter code here 
http://plnkr.co/edit/7mTvRB0ZlHOQwOIc?preview

相关问题