Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当“按值跟踪”更改时,如何重新生成ng repeat?_Javascript_Angularjs_Angularjs Ng Repeat - Fatal编程技术网

Javascript 当“按值跟踪”更改时,如何重新生成ng repeat?

Javascript 当“按值跟踪”更改时,如何重新生成ng repeat?,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我有以下ng重复表达式: ng-repeat="album in albums track by (album.id + gallery.layout)" 正如您所看到的,曲目来源取决于专辑的id和库布局。当我更改库布局时,什么也没发生-看起来ng repeat不希望按值更改轨迹。要修复它,我必须添加/删除相册,因为布局已更改,所有项目都已更新 如何强制angular更新ng repeat?我可以选择上一张相册,删除它,然后用$timeout添加,但我不喜欢这个解决方案。如果对象确实因库而异,

我有以下ng重复表达式:

ng-repeat="album in albums track by (album.id + gallery.layout)"
正如您所看到的,曲目来源取决于专辑的id和库布局。当我更改库布局时,什么也没发生-看起来ng repeat不希望按值更改轨迹。要修复它,我必须添加/删除相册,因为布局已更改,所有项目都已更新


如何强制angular更新ng repeat?我可以选择上一张相册,删除它,然后用$timeout添加,但我不喜欢这个解决方案。

如果对象确实因库而异,一个选项是为它设置单独的属性。因此,您的JS可能看起来像:

$scope.$watch('gallery.layout', injectGalleryLayoutIds);

function injectGalleryLayoutIds(galleryLayout){
  $scope.albums.forEach(function(album){
    album.idForGallery = album.id + galleryLayout;
  });
}
相反,你可以通过idForGallery追踪

如果要避免修改相册对象,可以使用包装器。当然,这将为每个相册使用一些额外的内存:

$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在它们之间切换或类似地注入布局,ng在HTML中重复,只需按相册进行跟踪。id

手动调用$digest可能会有所帮助不,这不是$digest问题