我知道我之前已经发生了这种情况,但事实并非如此,我无法做出必要的改变。
我有一个div,它开始是空的,并作为画廊的一部分隐藏起来。单击图像时,它会填充div并显示它。除了图像/内容,还有一些导航元素。事实是,这些也是动态生成的,因为角度需要重新编译,所以不能正常工作。这是填充的功能:
$scope.picturePop = function(picID){
match = $.grep($scope.gallery, function(obj) { return obj.id == picID; });
pic = match[0].image;
title = match[0].title;
desc = match[0].desc;
closediv = "<div id=\"divClose\" class=\"floatRight\" ng-click=\"closeParent();\">Close</div>";
navDiv = "";
if(picID > 1){
prev = picID - 1;
navDiv += "<div id=\"picNav\" ng-click=\"picturePop(" + prev + ")\">Previous</div>";
}
if(picID < $scope.picCount){
next = picID + 1;
navDiv += "<div id=\"picNav\" ng-click=\"picturePop(" + next + ");\">Next</div>";
}
$('#innerPictureDisplay').html(closediv + "<br/><br/><img src=\"images/paintings/" + pic + "\" /><p><b>" + title + "</b><\p><p>" + desc + "</p>"+ navDiv);
$('#outerPictureDisplay').css('display','block');
};
如何使代码“重新编译”以便“关闭”和导航项有效?
更新
所以,我改变了方法,但我显然仍然缺少一些东西:
我的新HTML:
<div id="outerPictureDisplay" ng-show="picID > 0">
<div id="innerPictureDisplay">
<div id="divClose" class="floatRight" ng-click="picID = 0;">Close</div>
<div id="picNav" ng-click="picturePop({{prevID}});" ng-show="picID > 1">Previous</div>
<div id="picNav" ng-click="picturePop({{nextID}});" ng-show="picID < picCount">Next</div>
<img src="images/paintings/{{thisPic.image}}" />
<p>
<b>{{thisPic.title}}</b>
</p>
<p>{{thisPic.desc}}</p>
</div>
</div>
我的新功能:
$scope.picturePop = function(picID){
match = $.grep($scope.gallery, function(obj) { return obj.id == picID; });
$scope.thisPic = match[0];
$scope.picID = picID;
$scope.nextID = picID + 1;
$scope.prevID = picID - 1;
var $content = $('#innerPictureDisplay');
var scope = $content.scope();
$compile($content.contents())(scope);
};
当我点击图片时,它都会正常加载但是当我点击上一个或下一个时,它会关闭,因为它将picID注册为null。我检查过并且数字确实在代码中打印出来,但是角度在点击时看不到它们。它们是未定义的 - 似乎是编译问题。我尝试将它全部作为指令实现,即使使用建议的链接,但我必须做一些事情,因为它没有帮助。