javascript - Angular View 未更新

标签 javascript angularjs

如果我在 $timeout 之后修改 $scope,我的 View 将无法正确呈现。我不明白为什么。如果我不先执行 $timeout ,它就会起作用。

http://plnkr.co/edit/oGuPgt7VaYKgPFh00lDV?p=preview

<script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular.min.js'></script>
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">

<script>

angular.module('treeApp', [])

.controller('TreeController', ['$scope', '$timeout', function($scope, $timeout) {

  // This works
  // $scope.nodes = {
  //   1:{node_id:1, text:'foo text', parent_id:null, child_ids:[2,3]},
  //   2:{node_id:2, text:'bar text', parent_id:1, child_ids:[]},
  //   3:{node_id:3, text:'abc text', parent_id:1, child_ids:[]}
  // }
  // $scope.top_ids = [1]

  // This doesn't work
  $timeout(function() {
    $scope.nodes = {
      1:{node_id:1, text:'foo text', parent_id:null, child_ids:[2,3]},
      2:{node_id:2, text:'bar text', parent_id:1, child_ids:[]},
      3:{node_id:3, text:'red text', parent_id:1, child_ids:[]}
    }
    $scope.top_ids = [1]
  }, 1000)
}])

</script>


<div ng-app="treeApp">

  <script type="text/ng-template" id="node.html">
    <li node_id="{{node_id}}" ng-repeat="node_id in node_ids" ui-tree-node
        ng-init="node = nodes[node_id]">
      {{node.text}}
      <ol ng-include="'node.html'" ng-init="node_ids = node.child_ids"></ol>
    </li>
  </script>

  <div ng-controller="TreeController">
    <ol ng-include="'node.html'" ng-init="node_ids = top_ids"></ol>
    <pre>{{top_ids | json}}</pre>
    <pre>{{nodes | json}}</pre>
  </div>
</div>

最佳答案

<ol ng-include="'node.html'" ng-init="node_ids = top_ids"></ol>

您使用top_ids初始化node_ids。这是一次性分配,而不是绑定(bind)。当您使用 $timeout 时,top_ids 的值在赋值时为 undefined

最简单的解决方案是将 $scope.top_ids 重命名为 $scope.node_ids 并删除 ng-init

关于javascript - Angular View 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26839559/

相关文章:

javascript - AngularJS:将 XML 字符串加载到 XML 文档

javascript - 调用函数比直接调用更快?

javascript - 在 DalekJS 中迭代 DOM 元素

javascript - 我怎样才能使动画的最终状态持续存在?

javascript - 如何解决自动完成错误?

javascript - 我怎样才能延迟一个函数的执行,直到其他两个使用 $q 完成?

javascript - 如何使用日期时间选择器确定整周的开放时间分钟数?

javascript - 使用 listView 和 PouchDb 的 Ionic (v1) 应用程序问题

javascript - Angular 路线问题

javascript - 如何在 ng-bind-html 中呈现 Angular 变量的内容