javascript - Angular 模型更新后获取 DOM 元素

标签 javascript angularjs

Angular 新手。我试图在模型更新后获取 DOM 元素,但得到 null。这是我的 HTML 代码。

<div ng-repeat="file in files">
 <span id="file{{file.id}}">{{file.name}}</span>
 <canvas id="canvas{{file.id}}" />
</div>

这是我的 Controller 代码

angular.module('mycontrollers',[])
 .controller('FileController',function(FileService) {
       $scope.files = {};
    FileService.updateFiles()
        .then(
        function(data) {
            $scope.files = data.files;
            updateCanvas($scope.files);
        },function(err) {
            console.log("error occured");
        };
 };
function updateCanvas(files) {
    files.forEach(function(file){
    var canvas = document.getElementById('canvas'+file.id);
    ... 
    do something with canvas
    ...
    }
}

Canvas 为空,因为 document.getElementById 找不到该元素。服务器的响应正确返回(因此我没有添加 FileService 代码)。 data.files 包含适当的数据。

模型更新后如何获取元素?

最佳答案

这是因为模型已更新,但 DOM 尚未更新。

您可以做的是调用带有超时的 updateCanvas 函数,这将确保该函数在 DOM 更新后运行:

.controller('FileController',function(FileService, $timeout) {
    ....
    $timeout(function() { updateCanvas($scope.files) });

关于javascript - Angular 模型更新后获取 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152014/

相关文章:

javascript - cakephp 外部 js 文件中的图像声明

javascript - 带有居中 div 的动画

javascript - 来自json对象的Angular.js格式日期

javascript - AngularJS $http.post 错误意外的 token F

javascript - Angular http json 请求问题

javascript - 如果每天单击一次按钮并在第二天使用 JavaScript 和 AngularJS 1 启用,如何禁用按钮?

javascript - 如何在ngRepeat中仅重复 "key"一次(AngularJS)

javascript - 从网站解析html代码并将其显示在java元素上

javascript - 悬停时显示前一个元素

angularjs - 带有 Ajax 功能的 Angular-UI Select2 的两种方式数据绑定(bind)