Angularjs 角度代码在动态生成的内容中不起作用
我知道我以前也遇到过这种情况,但不完全是这样,我很难做出必要的改变 我有一个div,一开始是空的,作为画廊的一部分隐藏着。单击图像时,它填充div并显示它。除了图像/内容之外,还有一些导航元素。问题是,这些都是动态生成的,不起作用,因为角度需要重新编译。下面是填充的函数:Angularjs 角度代码在动态生成的内容中不起作用,angularjs,dynamically-generated,angularjs-injector,Angularjs,Dynamically Generated,Angularjs Injector,我知道我以前也遇到过这种情况,但不完全是这样,我很难做出必要的改变 我有一个div,一开始是空的,作为画廊的一部分隐藏着。单击图像时,它填充div并显示它。除了图像/内容之外,还有一些导航元素。问题是,这些都是动态生成的,不起作用,因为角度需要重新编译。下面是填充的函数: $scope.picturePop = function(picID){ match = $.grep($scope.gallery, function(obj) { return obj.id == picI
$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');
};
当我点击一张图片时,它会正常加载,但当我点击上一张或下一张图片时,它会关闭,因为它将picID注册为null。我检查了一下,这些数字确实印在了代码中,但angular没有在点击中看到它们。它们是未定义的,似乎是编译问题。我试着把它作为一个指令来实现,甚至使用了建议的链接,但我一定做了些什么,因为它没有帮助 您可以像这样使用角度服务:
$compile("“的bindHtmlCompile
指令,您可以找到。首先为什么要使用jQuery?使用angular方法,让angular从您的数据模型中构建和管理dom。强烈建议阅读:首先,您真的突破了angular实用程序的极限。您注入的html可以很容易地实现。”在模板中单击并使用ng show=“picID>1”
(例如)显示或隐藏导航和ng src=“…”
以显示图像本身。正如我在下面所说,我知道这有点落后。但我只是把它扔掉了。不过我想我会回去重新制作这个清洁剂。谢谢!是的,我知道这是一个糟糕的构建方式。我只是为了概念验证而快速将其抽出来,并打算稍后再清理。谢谢!这与ba无关d方式,但这是在angular中重新编译的唯一方式。不过,你们是对的。我需要重新思考一下我首先是如何显示这一点的。更新了我的答案(更新1),这家伙可能有助于提供一个非常有用的指令。您的表达式不正确,您应该使用ng click=“picturePop(nextID);”
oncepicturePop
和nextID
都是$scope成员。因为ngClick已经是一个角度指令,所以不需要使用双胡子。
<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);
};
$compile("<a ng-click='myFunction()'>my html</a>")(scope);