Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.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
Javascript 如何在通过ajax调用的页面上使用angularJS指令?_Javascript_Html_Angularjs_Rendering_Directive - Fatal编程技术网

Javascript 如何在通过ajax调用的页面上使用angularJS指令?

Javascript 如何在通过ajax调用的页面上使用angularJS指令?,javascript,html,angularjs,rendering,directive,Javascript,Html,Angularjs,Rendering,Directive,我有以下html(可以直接访问或通过ajax调用): $scope.allSubthemes看起来还可以,但是dl没有被渲染。 我可以看到一秒钟所有的东西都被正确地渲染,然后它又回到了{{subtheme.Title}},几乎就像它被“未渲染”。。。你知道我做错了什么吗 演示jsiddle:rGil修复了jsiddle。它在一个元素上缺少了一个ng app=“pddc”声明,所以Angular不知道从哪里开始它的魔力 我想提到另一种呈现问题数据的方法。我建议在ng repeat中使用ng rep

我有以下html(可以直接访问或通过ajax调用):

$scope.allSubthemes看起来还可以,但是dl没有被渲染。 我可以看到一秒钟所有的东西都被正确地渲染,然后它又回到了{{subtheme.Title}},几乎就像它被“未渲染”。。。你知道我做错了什么吗


演示jsiddle:

rGil修复了jsiddle。它在一个元素上缺少了一个
ng app=“pddc”
声明,所以Angular不知道从哪里开始它的魔力

我想提到另一种呈现问题数据的方法。我建议在
ng repeat
中使用
ng repeat
。查看我的分叉和更新的小提琴。实际上,您可以在子主题的
ng repeat
中引用父主题,因此不必将父主题中的值复制到每个子主题中(这有效地消除了本例中对指令的需要)

使用嵌套的
ng repeat
的另一个原因是异步从web服务提取数据时可能出现的异步问题。可能发生的情况是,当指令执行时,它可能没有任何要循环和填充的数据,因为数据尚未到达

如果使用两次ng重复,Angular将监视
$scope.data
,并在数据到达时重新运行ng重复。在我的示例中,我在设置数据以模拟web服务延迟时添加了500毫秒的延迟,您将看到,即使有“延迟”,数据最终也会呈现

解决异步问题还有两种方法:

  • 在指令中使用,手动监视数据,或
  • 使用Angular的“解析”功能,确保在控制器执行之前检索数据

  • 虽然这些替代方法可行,但我认为这两种方法都比只使用两个ng重复更复杂。

    您能否为此创建一个JSFIDLE,以便我们能够更快地进行调试。这里您有:我不知道您的真实代码,但FIDLE没有加载angularjs。在我的JSFIDLE中,错过ng应用程序是一个错误。虽然您的JSFIDLE可以工作,但正如我所说,我的JSFIDLE会在一秒钟内显示正确的渲染,并最终显示{{subtheme.Title}}未渲染。还有什么其他的想法可能导致这种情况吗?当我做JSFIDLE时,我错过了ng应用程序,但我的代码中有它。嵌套的ng repeat似乎是一个很好的解决方案,但我希望dl彼此相邻,在我的场景中,有多个容器是一个问题。我没有在我的应用程序中使用路由,所以我更喜欢其他解决方案。是否可以使用嵌套的ng repeat为所有dl保留相同的容器?如果没有,我如何使用$watch?困扰我的是,我可以在半秒钟内看到正确的渲染,但它最终显示{{subtheme.Title}}而没有渲染。你知道可能是什么吗?同样,对于嵌套的ng repeat,顺序也不正确,因为它只为每个主题单独排序,我希望所有子主题都排序,而不依赖它们的父主题(theme)。
    <section id="content" ng-controller="setTreeDataCtrl" get-subthemes>
    <dl ng-repeat="subtheme in allSubthemes">
        <dt>{{subtheme.Title}}</dt>
    </dl>
    
    myApp.directive('getSubthemes', function() {
    return function($scope, element, attrs) {
        $scope.allSubthemes = [];
        angular.forEach($scope.data.Themes, function(value, key) {
            angular.forEach(value.SubThemes, function(value2, key2) {
                $scope.allSubthemes.push({
                    'ThemeTitle': value.Title,
                    'ThemeUrlSlug': value.UrlSlug,
                    'Title': value2.Title,
                    'UrlSlug': value2.UrlSlug
                });
            });
        });
    }
    });