AngularJS获取getElementById()不起作用及HTML与controller加载顺序问题

本文探讨了AngularJS项目中富文本插件加载失败的问题,详细介绍了使用$timeout延时处理和通过directive监听两种解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AngularJS项目需要引入富文本插件,富文本插件需要获取HTMLdom的id进行富文本插件初始化,所以最开始采用getElementById()方法想要获取id,但是console报出获取不到id,写法如下:

define(["app", "wangEditor"], function (app, E) {
    app.controller("savingEdit", ["$scope", "$rootScope",'$timeout',
        function ($scope, $rootScope,$timeout) {
            //富文本编辑器,引入wangEditor组建,并初始化
            var editeditor;
            $scope.myEditorClick = function () {
                //初始化E
                editeditor = new E(document.getElementById("myEditEditor"));
                //渲染富文本编辑器
                editeditor.create();
            }
            $scope.myEditorClick();
        }
    ]);
});

<div id="myEditEditor"></div>

上面这种写法会报myEditEditor为空id。

经过分析,我推测是因为AngularJS在加载controller时,对应的HTML文件并没有加载完成,他们可能是同时加载的。在网上搜索了很多办法,最后我总结出如下两种办法实现id的正常获取:

1.$timeout延时处理

这个办法显而易见,既然直接加载获取不到,那就价格延时,等html加载了在执行js渲染。代码如下:

define(["app", "wangEditor"], function (app, E) {
    app.controller("savingEdit", ["$scope", "$rootScope",'$timeout',
        function ($scope, $rootScope,$timeout) {
            //富文本编辑器,引入wangEditor组建,并初始化
            var editeditor;
            $scope.myEditorClick = function () {
                //初始化E
                editeditor = new E(document.getElementById("myEditEditor"));
                //渲染富文本编辑器
                editeditor.create();
            }
            $timeout(function () {
                $scope.myEditorClick();
            },300);
        }
    ]);
});

<div id="myEditEditor"></div>

2.通过directive监听html文本是否渲染完成

大家一般是监听ng-repeat是否渲染完最后一条来监听,你也可以监听其他html是否渲染完成。以ng-repeat为例,代码如下:

app.directive('repeatFinish',function(){
    return {
        link: function(scope,element,attr){
            console.log(scope.$index)
            if(scope.$last == true){
                scope.$eval( attr.repeatFinish )
            }
        }
    }
})

<div id="box">
    <span ng-repeat="item in data" repeat-finish="renderFinish()">{{item.str}}</span>
</div>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值