当按值跟踪发生变化时,如何重建ng-repeat
How to rebuild ng-repeat when track by value is changed?
我有以下ng-repeat表达式:
ng-repeat="album in albums track by (album.id + gallery.layout)"
你可以看到track by取决于专辑的id和画廊布局。当我改变画廊布局什么都没有发生-看起来ng-repeat
不期望track by
值改变。为了修复它,我必须添加/删除相册(因为布局改变了,所有项目都更新了)。
如何强制角更新ng-repeat
?我可以选择最后一个专辑,删除它并添加$timeout
,但我不喜欢这个解决方案。
如果对象确实是基于图库的不同,一个选择是为它设置一个单独的属性。所以你的JS可能看起来像:
$scope.$watch('gallery.layout', injectGalleryLayoutIds);
function injectGalleryLayoutIds(galleryLayout){
$scope.albums.forEach(function(album){
album.idForGallery = album.id + galleryLayout;
});
}
而不是track by idForGallery
。
如果你想避免修改album
对象,你可以使用包装器(当然,这将为每个相册使用一些额外的内存):
$scope.$watch('gallery.layout', updateGalleryAlbums);
function updateGalleryAlbums(galleryLayout){
$scope.galleryAlbums = $scope.albums.map(function(album){
return { album: album, id: album.id + galleryLayout };
});
}
然而,我得到的印象是,你试图解决的问题可能更好地解决:
1)纯CSS。为父元素添加一个具有布局名称的不同类,然后根据需要尽可能详细地绘制项目。显示/隐藏项目,并通过CSS重新设计样式。
如果布局的结构差异太大,纯CSS方法是可行的,另一个选择可能是:
2)对不同的图库布局有指令或视图,在它们之间有ng-switch
(或类似地注入布局),并在它们的HTML中有ng-repeat
,并且简单地track by album.id
相关文章:
- 如何在重建URL后从URL中传递过滤值,目的是使用Angular2和Typescript实现无限滚动
- 自动重建闭包大豆模板
- 循环更改值与数组重建的对象数组
- 删除本地存储 JSON 对象并重建阵列
- 根据父项和项 ID 重建或重新生成现有 JSON
- 如何重建拉斐尔的路径
- 重建javascript数组
- 重建有角度的java脚本数组对象
- 如何“;重建”;angularjs一家工厂的$resource
- 什么'是使用Gulp读取、重建和替换文件中内容块的最有效方法
- 重建select2选项而不丢失当前选择
- Webpack--在窗口中处于热状态而未重建捆绑包
- 如何减少 webpack 开发服务器重建时间
- j查询干净的方法来获取href数组并重建它
- 如何在 reactjs 中重建现有的 Dom
- 是否有任何库可以为 JSON 数据生成元组和重建字符串
- Ajax iFrame:PHP 不会在我的循环中添加我与 SQL 不同的字符串(以重建 HTML 代码)
- 重建选项列表时失去选择选项的焦点
- 刷新后重建路由
- 安装 socket.io 返回(node-gyp 重建 2> 构建错误.log) ||(0 号出口)