Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度代码在动态生成的内容中不起作用_Angularjs_Dynamically Generated_Angularjs Injector - Fatal编程技术网

Angularjs 角度代码在动态生成的内容中不起作用

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

我知道我以前也遇到过这种情况,但不完全是这样,我很难做出必要的改变

我有一个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');
};

当我点击一张图片时,它会正常加载,但当我点击上一张或下一张图片时,它会关闭,因为它将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);”
once
picturePop
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);