我知道我以前也发生过这种情况,但并非完全以这种方式发生,而且我在进行必要的更改时遇到了麻烦。
我有一个 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 注册为空。我检查了,数字确实打印在代码中,但是 angular 在点击时看不到它们。它们以未定义的形式出现 - 似乎是编译问题。我尝试将其全部实现为指令,即使使用建议的链接,但我一定做了一些事情,因为它没有帮助。