"Cannot read property 'childNodes' of undefined" 使用 list.js 将控制器添加到列表元素

"Cannot read property 'childNodes' of undefined" adding controller to list element with list.js

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

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

"Cannot read property 'childNodes' of undefined"

如果在使用 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)

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

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