我们正在为一个相当大的应用程序开发 CRUD 模式。我们用来定义一对多关系的一种常见 UI 模式,其中记录通过复选框关联。挑战在于通过刷新记录列表(和关联的 ng-model)的异步调用(搜索/排序)来保持选择(选中/未选中)。我想听听更高级的 AngularJS 用户(我是菜鸟)什么被认为是最好的做法?任何反馈表示赞赏!
编辑
这是一个有效的 plunk,显示了我目前对 Angular 的理解最有可能解决这个问题。如果您有更好的方法,请告诉我!
我们正在为一个相当大的应用程序开发 CRUD 模式。我们用来定义一对多关系的一种常见 UI 模式,其中记录通过复选框关联。挑战在于通过刷新记录列表(和关联的 ng-model)的异步调用(搜索/排序)来保持选择(选中/未选中)。我想听听更高级的 AngularJS 用户(我是菜鸟)什么被认为是最好的做法?任何反馈表示赞赏!
编辑
这是一个有效的 plunk,显示了我目前对 Angular 的理解最有可能解决这个问题。如果您有更好的方法,请告诉我!
我认为你可以维护一个单独的选定名称集合。所以下次你过滤列表时,你只需要在集合中查找以保持项目被选中。您可以通过在控制器中绑定一些变量(arrSelected)来做到这一点,或者您也可以创建一个单独的服务。
您是否考虑过使用过滤器而不是重新获取。当然,这实际上取决于您计划拥有多少项目,但我已经成功过滤了包含大约 5000 个项目的嵌套 JSON 对象。
这是完整的 plunker:http ://plnkr.co/edit/l4jYgt0LjRoP2H0YuTIT?p=preview
亮点:在index.html中为您重复添加 | 筛选
<tr ng-repeat="user in users | filter:userFilter">
在script.js中,我们添加过滤器函数和一个 $scope 变量来保存过滤后的字母:
$scope.filteredLetter
$scope.userFilter = function (elem) {
if (elem.name.lastIndexOf($scope.filteredLetter, 0) === 0 || $scope.filteredLetter == '') {
return true;
} else {
return false
}
}
作为奖励,我在 ng-class 中添加了显示突出显示的字母。
非常简单的代码,但是即使人们改变了事情,这也给了你完全的持久性。您现在甚至可以尝试添加一个<input>
带有ng-model绑定的标签,比如$scope.filteredName。然后您需要做的就是将 JS 添加到过滤器中,以便对部分名称进行更深的过滤。