角度代码无法在动态生成的内容中使用

时间:2016-01-04 18:54:28

标签: angularjs dynamically-generated angularjs-injector

我知道我之前已经发生了这种情况,但事实并非如此,我无法做出必要的改变。

我有一个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。我检查过并且数字确实在代码中打印出来,但是角度在点击时看不到它们。它们是未定义的 - 似乎是编译问题。我尝试将它全部作为指令实现,即使使用建议的链接,但我必须做一些事情,因为它没有帮助。

1 个答案:

答案 0 :(得分:0)

您可以像这样使用角度服务$compile

$compile("<a ng-click='myFunction()'>my html</a>")(scope);

当然,无论你身在何处,都必须注射他。 无论如何,为了上帝的缘故,不要以这种方式使用DOM操作。您应该使用指令并从模型中提供内容。

更新1

我使用incunabindHtmlCompile指令,您可以找到here