javascript - $http 成功功能 block 中不可用的动态元素和范围变量

标签 javascript html angularjs angularjs-scope angularjs-bindings

我正在调用一个 $http get 方法,在成功回调中,我根据该响应在 html 中得到的响应正在执行 ng-repeat 以迭代元素。此外,我根据 ng-repeat 的 $index 动态维护一些 div 的 id。现在,当我试图根据它们的 id 设置这些 div 的 innerHTML 时,它给我一个错误,因为那个元素当时还没有创建。对这种情况下发生的事情感到困惑。下面的模拟代码片段供您引用:

<tr ng-repeat-start= "dataArray in gridData" >
    <td>
        <span ng-bind="expanded ? '-' : '+'" ng-click="expanded = !expanded"></span>{{dataArray.name}}
    </td>
    <td>
        <div id="th_{{$index + 1}}" ng-hide="expanded" ng-repeat="rcL1 in rch.rcs" >
            <div ng-hide="expandedTreeCol" id="to_{{$parent.$index}}_{{$index}}">
            </div>
        </div>
    </td>
</tr>

这是js片段:

$http.get(url)
        .then(function(response) {
            console.log(response);

            $scope.gridData = response.data.data;

            var rch = $scope.rch.rcs;
            var grid_data = $scope.gridData;

            document.getElementById("to_0_0").innerHTML = "1";
        });

在尝试设置此 innerHTML 时,它显示“无法将属性‘innerHTML’设置为 null”。但是,当我完成代码的执行时,在 dom 中,我可以找到创建了该 id 的 div。但是,当我在回调函数中时,它似乎尚未创建。有人请解释这里发生了什么以及我如何从 js 设置 innerHTML。

谢谢。

最佳答案

  1. ng-repeat 指令在 $scope.rch.rcs 上初始化和初始化观察器
  2. 发送http请求,执行回调
  3. document.getElementById("to_0_0")什么都不返回
  4. 当你使用 $http 时,它会触发 $digest
  5. $digest 运行 -> 在 $scope.rch.rcs 上观察变化 -> ng-repeat 指令渲染元素

关于javascript - $http 成功功能 block 中不可用的动态元素和范围变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51820701/

相关文章:

javascript - 如何获取ie的焦点节点

javascript - 无法将 base64 png 图像添加到 JSPDF Javascript

javascript - Express 4 : I have a variable set up in app. js,我需要将它发送到我的路线

javascript - 响应式多级菜单

javascript - 识别 Javascript 中的主题标签

angularjs - 如何禁用单击 Accordion 组标题?

javascript - 调用 jquery 方法找不到插件

javascript - xeditable 下拉菜单的选定值无法正常工作

javascript - 使用过滤器在 Canvas 中打印错误

javascript - 调用函数或将数据传递给另一个 Controller AngularJS