Pug (Jade) 基地 HTML 页面:找不到元素:#app

Pug (Jade) base HTML Page: Cannot find element: #app

我使用 vibed 服务器。它使用 Pug 预处理器(以前称为 Jade)。这是我的页面代码:

doctype html
html
    head
        script(src="https://unpkg.com/vue")
        script(src="app.js")
        title Hello, World
    body
        h1 Hello World
        #app
            |{{message}}

它生成下一个 HTML 输出:

<!DOCTYPE html>
<html>
    <head>
        <script src="https://unpkg.com/vue"></script><script src="app.js"></script><title>Hello, World</title>
    </head>
    <body>
        <h1>Hello World</h1>
        <div id="app">
            {{message}}
        </div>
    </body>
</html>

我的app.js代码:

window.onload = function() {

    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      }
    });

    app.$mount('#app');

}

但这是行不通的。在浏览器控制台中,我收到下一个错误: Cannot find element: #app

upd:将 script(src="app.js") 移至下方有帮助。但是有更好的变体吗?或者没关系?

其实有两种处理方法。一种是将脚本移动到页面底部,第二种是在页面加载时使用事件触发您的代码。

最近(没有 jQuery),您通常监听要加载的页面的方式是监听 DOMContentLoaded 事件。

document.addEventListener("DOMContentLoaded", function() {
  var app = new Vue(...)
});

DOMContentLoadedload 事件之间的主要区别在于 DOMContentLoaded 在解析完所有 DOM 内容后触发,而 load 事件等待 所有内容 加载,包括图像、样式表和其他内容。