我有md-tabs
设置,我将其绑定到$scope.selectedIndex
,以便我可以在需要时通过代码更改它。
我使用一个按钮,调用我的更新数据的函数,然后将$scope.selectedIndex
更改为所需的标签号(在本例中为3),然后更改所选标签。
所有这一切都很好,除非它在$scope.selectedIndex
调用完成之前调用.forEach()
,这导致ng-repeat
无法正常工作,因为它没有定义,因此没有错误地退出。
按钮通话:
ng-click="initTVShow(show)"
功能:
$scope.initTVShow = function(show) {
var rng = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 10; i++ )
rng += possible.charAt(Math.floor(Math.random() * possible.length));
$scope.show = show;
$scope.show_name = show.title.split(' ').join('') + "-" + rng;
$scope.poster = show.images.poster;
$scope.backdrop = show.images.poster;
$scope.seasons = [{},{}];
getShow(show.imdb_id, function (err, show) {
for (let i = 0; i < 10; i++) {
$scope.seasons[i] = show.episodes.filter((episode) => episode.season === i);
}
});
$scope.selectedIndex=3;
};
如您所见,$scope.selectedIndex=3;
基本上更改为选项卡#4(从0开始)。
然后下面的ng-repeat似乎不起作用,很可能是因为.forEach尚未完成。我测试了带有2个空索引的$ scope.seasons进行测试,并且可以正常工作。
<span ng-repeat="season in seasons">{{season.number}}</span>
答案 0 :(得分:1)
我认为这是因为函数getShow以异步方式检索数据。向我们展示。 试试这个:
getShow(show.imdb_id, function (err, show) {
show.episodes.forEach(function(array){
$scope.seasons[array.season] = array;
});
$scope.selectedIndex=3;
});
答案 1 :(得分:1)
这是因为数据没有准备好,而DOM是。
您可以通过在元素上添加ng-if
并检查数据是否准备好来轻松解决。
像:<span ng-if="season.number" ng-repeat="season in seasons">{{season.number}}</span>
答案 2 :(得分:0)
我找到了解决方案,它实际上只是由for()循环(哪个预编辑,是.forEach)引起的,我简单地给它添加了一个回调,这改变了标签它只是工作了!
更改:
for (let i = 0; i < 11; i++) { }
要:
for (let i = 0; i < 11 || function(){ $scope.selectedIndex=3; }(); i++) { }