You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue挂载目标#app找不到:custom-vue.js应放置在何处?

解决Vue挂载错误:Failed to mount app: mount target selector "#app" returned null

问题背景

在Django项目中,将<script src="{% static 'js/custom-vue.js' %}"></script>放在master.html的<head>标签内,但Vue挂载目标#app位于profile.html的content区块中,导致出现挂载目标找不到的错误。

解决方案

有两种可行的位置调整方案:

方案1:将脚本移到master.html的body结束标签前

修改master.html,把custom-vue.js的引用移到</body>之前,确保DOM完全渲染后再执行Vue初始化:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Profile</title>  
    {% load bootstrap4 %}
    {% bootstrap_css %}
    {% bootstrap_javascript jquery='full' %}

    <script src="{% static 'js/vue.global.js' %}"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css">
    
</head> 

<body>
    <div class="container">
        {% block content %}{% endblock %}
    </div>

    <!-- 移到此处 -->
    <script src="{% static 'js/custom-vue.js' %}"></script>
</body>
</html>

方案2:仅在profile.html中引入脚本(推荐)

如果只有profile.html需要这个Vue实例,直接在profile.html的content区块末尾、{% endblock %}之前添加脚本引用:

{% extends 'users/master.html' %}

{% block title %}
Profile Page
{% endblock %}

{% block content %}
<!-- 原有的content内容 -->
    </div> <!-- end of app  -->
    
<hr>

</div>

<!-- 添加脚本引用 -->
<script src="{% static 'js/custom-vue.js' %}"></script>
{% endblock %}

错误原因

浏览器按顺序解析HTML:<head>中的脚本会在<body>内容渲染前执行,此时#app元素还未被渲染到DOM中,Vue无法找到挂载目标,因此抛出错误。将脚本移到DOM元素之后,就能确保执行时#app已经存在。

额外优化建议

如果需要保留脚本在<head>中的位置,可以通过监听DOMContentLoaded事件延迟Vue初始化,修改custom-vue.js:

document.addEventListener('DOMContentLoaded', function() {
  const app = new Vue({
    el: '#app',
    // 原有的data、created、methods等内容
  });
});

内容的提问来源于stack exchange,提问作者Eli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:39:58