我已经阅读了很多关于使用指令或 $last
要在ng repeat结束时调用函数,即使是两个级别的嵌套ng repeat,但与嵌套ng repeat的级别无关。我认为问题与自动加载新页面/视图有关,而ng repeat仍在呈现元素…新页面加载,但返回ng repeat创建的列表会导致奇怪的事情发生。
简单的例子:
<div ng-repeat="products in categories" ng-init="$last && listLoaded()"> // length = 12
<div ng-repeat="product in products">
<div ng-if="product.type == 1" ng-repeat="feature in product.features"> // length = 20
<div ng-if="feature.specs == 1" ng-repeat="specs in feature.specs"> // length = 40
</div>
<div ng-if="feature.desc == 1" ng-repeat="desc in feature.desc"> // length = 4
</div>
<div ng-if="feature.reviews > 0" ng-repeat="review in feature.reviews"> // length = 125
<div>{{review.review}}
<div ng-if="review.pictures > 0" ng-repeat="pictures in review.pictures"> // length = 3
<img src="blah.com/imgs/{{picture.picURL}}" id="picture.pictureID" ng-click="enlargeImage(picture.pictureID)">
</div>
</div>
</div>
</div>
</div>
$scope.listLoaded = function() {
if ($stateParams.prodID) {
//external ID passed in, autoload featurePage
$state.go("tabs/search/" + featurePage", {product : productID}) ;
}
}
$scope.enlargeImage = function(id) {
var el = document.getElementById(id) ;
el.style.border = "1px solid red" ;
el.style.display = "block" ;
console.log(el) ;
angular.element('#'+id).border = "1px solid red" ;
angular.element('#'+id.display = "block" ;
}
如您所见,有多个嵌套的ng重复,所有长度都不同,它们的渲染时间都大不相同。我需要在所有嵌套ng重复中的所有项都完成渲染后执行函数 listLoaded
调用其他选项卡/视图/页面。
当传入外部id时,它将自动加载功能页。一切都很好, featurePage
已加载所有正确的信息。但是,当我返回列表页面时,整个页面都在那里,但是当单击图像时,虽然函数正在执行,但是图像没有得到应用于它们的样式。
的console.log输出 el
显示应用于元素(但在开发人员工具中)的样式 Elements -> Styles
在第节中,样式实际上没有应用于元素,并且视觉上没有任何图像样式发生更改。
console.log output:
<img src="blah.com/imgs/{{picture.picURL}}" id="picture.pictureID" ng-click="enlargeImage(picture.pictureID)" style="border:1px solid red;display:block;">
在自动加载到 featurePage
,如果我参照产品列表页面,未呈现样式更改的相同元素仍然存在问题,它们不会更改。视图被缓存。当我删除页面缓存时,一切正常。因此,问题必须与dom元素没有完全呈现或添加到dom中有关。
当我评论出 listLoaded()
功能,并且不强制自动加载 featurePage
,完整列表呈现,所有ng单击都正常工作。然后,我可以手动单击特定产品以转到 featurePage
-然后再回到列表中,一切仍然正常。我认为这个问题与 angular.element
在页面视图自动加载到页面之前未完全加载 featurePage
-但我不确定。我只知道当我不自动重定向到 featurePage
我甚至在第一次ng repeat上尝试了一个指令,但仍然存在相同的问题:
.directive('listRepeatDirective', function() {
return function(scope, element, attrs) {
angular.element(element).css('color','blue');
if (scope.$last){
scope.listLoaded() ;
}
};
})
暂无答案!
目前还没有任何答案,快来回答吧!