“无法读取未定义的属性'childNodes'”将控制器添加到list.js的list元素中

时间:2015-04-30 14:55:43

标签: javascript angularjs angularjs-scope listjs

我正在尝试使用list.js库创建一个列表对象,并将其添加到angular.js根作用域中,以便在嵌套作用域中使用它。只要我不向列表元素添加控制器,这就可以正常工作。

如果我这样做,我在javascript控制台中收到以下错误。

  

“无法读取未定义的属性'childNodes'”

如果在使用ng-init调用的init()函数内初始化列表,则会发生相同的情况。

以下是html和js文件

<html>
<head>

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.1.1/list.min.js"></script>
    <script type="text/javascript" src="listBug.js"></script>
</head>
<body ng-controller="MainController" ng-app="theApp">
<div id="theList">
    <ul class="list">
        <li>
            <div ng-controller="divController">
                <span class="id"></span>
            </div>
        </li>
    </ul>
</div>      
</body>

</html>

listBug.js

var app = angular.module('theApp', [])

mainController=function($scope){

    var opts={valueNames: ['id'] }
    $scope.theList=new List('theList', opts);
}

app.controller("MainController", mainController)


divController=function($scope){

}

app.controller("divController", divController)

1 个答案:

答案 0 :(得分:2)

问题是,在调用代码时,DOM未完全加载。您可以通过执行以下操作来延迟它

mainController=function($scope){
    angular.element(document).ready(function () {
        var opts={valueNames: ['id'] } 
        $scope.theList=new List('theList', opts);
    });
}