【问题标题】:Ionic3 - ElementRef nativeElement.getElementsByClassName returns collection but it is inaccessibleIonic3 - ElementRef nativeElement.getElementsByClassName 返回集合,但无法访问
【发布时间】:2019-02-22 21:07:31
【问题描述】:

我正在关注这个关于离子和指令的tutorial,一切正常,除非我尝试使用 ElementRef 的 nativeElement.getElementsByClassName 获取 FAB 元素,如下所示:

this.fab = this.element.nativeElement.getElementsByClassName('fab')[0]

返回undefined。问题是当我删除索引并使用console.log 打印整个 HTMLCollection 时,它会显示一个完整的列表,其中包含元素内的所有 FAB。

跑步

console.log(this.element.nativeElement.getElementsByClassName('fab'),
        this.element.nativeElement.getElementsByClassName('fab')[0]);

ngOnInit 给出以下结果:

我在这里做错了什么?与问题相关的代码的每一部分都与教程相同,这是一个相当新的视频......

【问题讨论】:

    标签: html angular ionic-framework ionic3


    【解决方案1】:

    我认为这里的原因是当你用那一行要求它们时这些元素不存在:

    console.log(this.element.nativeElement.getElementsByClassName('fab'),
            this.element.nativeElement.getElementsByClassName('fab')[0]);
    

    有一个简单的例子可以说明问题所在:

        console.log(document.getElementsByClassName('fab'), document.getElementsByClassName('fab')[0]);
    
        const el1 = document.createElement('div');
        el1.setAttribute('class', 'fab');
    
        const el2 = document.createElement('div');
        el2.setAttribute('class', 'fab');
    
        setTimeout(() => {
            this.abc.nativeElement.appendChild(el1);
            this.abc.nativeElement.appendChild(el2);
        }, 2000);
    

    元素在 2 秒后添加,控制台日志与您的相同,但是当您单击 HTMLCollection 时,它将评估并显示这些元素 - 当然如果您在 2 秒后单击(当元素存在时)。

    如果这些元素在您询问时确实存在,那么控制台日志应该看起来更像:

    HTMLCollection(2) [div.fab, div.fab]
    

    另外,请注意,Google Chrome 控制台中的这个小 i 会通知您,值刚刚被评估 - 在您点击它的那一刻。

    【讨论】:

    • 哦,我明白了。我注意到那个小我,但不明白这是什么意思哈哈。我会尝试在超时或其他情况下获取这些元素,以确保这些元素可用并提供一些反馈。这很奇怪,因为在教程中,这个人立即使用了这些值......也许是因为他的测试页面基本上只是纯文本?虽然我的已经装满了其他东西,所以加载或类似的东西需要更长的时间......
    • 就是这样。获取元素的简单延迟解决了问题。谢谢!
    猜你喜欢
    • 2023-03-05
    • 2021-05-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多