为啥 vue.js 在 html 文件中不起作用?

Posted

技术标签:

【中文标题】为啥 vue.js 在 html 文件中不起作用?【英文标题】:Why does vue.js not work inside html files?为什么 vue.js 在 html 文件中不起作用? 【发布时间】:2021-10-28 04:38:03 【问题描述】:

我想将 Vue.js 添加到我的 Spring Boot 应用程序中。即使一切看起来都很好,但我无法让 vue 组件工作。 这是我的简单组件,MenuBar.vue

<template>
    <div>
        Menu
    </div>
</template>

<script>
export default 
    name: "MenuBar"

</script>

这里是应该使用它的 html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
</head>
<body>
<div id="vueApp">
    <menu-bar></menu-bar>
</div>

<form th:action="@/logout" method="post">
    <div><input type="submit" value="Log out"/></div>
</form>
</body>
</html>

配置文件index.js

import Vue from "vue";
import App from './App.vue'

Vue.config.devtools = true;

new Vue(
    el: '#app',
    template: '<App/>',
    components: App
);

new Vue(
    el: '#vueApp'
)

components.js

import Vue from 'vue';
import MenuBar from "./components/MenuBar";

Vue.component('menu-bar', MenuBar);

以及 webpack 配置文件:

// webpack.config.js
const VueLoaderPlugin = require('vue-loader');
const path = require('path');

module.exports = 
    mode: 'development',
    module: 
        rules: [
            
                test: /\.vue$/,
                loader: 'vue-loader'
            ,
            
                test: /\.js$/,
                loader: 'babel-loader'
            ,
            
                test: /\.css$/,
                use: [
                    'vue-style-loader',
                    'css-loader'
                ]
            
        ]
    ,
    entry: 
        main: path.resolve(__dirname, './src/index.js')
    ,
    resolve: 
        extensions: ['.vue', '.js'],
        alias: 
            'components': path.resolve(__dirname, './src/components/')
        
    ,
    plugins: [
        // make sure to include the plugin for the magic
        new VueLoaderPlugin()
    ],
    devServer: 
        hot: false,
        liveReload: true,
        proxy: 
            "*": 
                target: 'http://localhost:8080',
                ignorePath: false,
                changeOrigin: false,
                secure: false
            
        ,
        port: 8081,
        host: "0.0.0.0"
    ,
    output: 
        publicPath: '/dist/',
        path: path.resolve(__dirname, './src/main/resources/static/dist')
    

当我构建 npm 并运行应用程序页面包含元素 &lt;menu-bar&gt;&lt;/menu-bar&gt; 但不加载其内容。这可能是什么问题?

【问题讨论】:

【参考方案1】:

问题是您在&lt;div id="vueApp"&gt; 中添加了component

<div id="vueApp">
    <menu-bar></menu-bar>
</div>

在这种情况下,您的应用会在此 &lt;div id="vueApp"&gt; 标记内呈现。您在 html 文件中的此标记内写入的所有内容都将被覆盖。

您还有另一个名为 App.vue 的文件。您应该将您的 MenuBar.vue 组件添加到这个主要组件中,它应该会显示出来。


编辑:让您的组件工作的最简单尝试

这是main.js

import  createApp  from 'vue'
import App from './App.vue'

// Create app
const app = createApp(App);

// Import component
import MenuBar from "./components/MenuBar";

// Use MenuBar
app.component('MenuBar', MenuBar);

// Mount app
app.mount('#app')

这是App.vue

<template>
  <div>
    <MenuBar></MenuBar>
    Body
  </div>
</template>

<script>
export default 
  name: 'App',

</script>

这是MenuBar.vue

<template>
  <div>
    Menu
  </div>
</template>

<script>
export default 
  name: "MenuBar"

</script>

由于我们有一个稍微不同的方法,我也会给你package.json,所以你可以点击npm install,它应该实现这个应用程序中包含的所有(少数)包:


  "name": "q68966956",
  "version": "0.1.0",
  "private": true,
  "scripts": 
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  ,
  "dependencies": 
    "core-js": "^3.6.5",
    "vue": "^3.0.0"
  ,
  "devDependencies": 
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^7.0.0"
  ,
  "eslintConfig": 
    "root": true,
    "env": 
      "node": true
    ,
    "extends": [
      "plugin:vue/vue3-essential",
      "eslint:recommended"
    ],
    "parserOptions": 
      "parser": "babel-eslint"
    ,
    "rules": 
  ,
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]

您的项目似乎还处于早期阶段,所以也许您可以从该代码的稳定基础开始。如果对您有帮助,请告诉我。

【讨论】:

试过了。还是不行。恐怕我的配置有问题:/ @Bajor 我将获取您的代码并对其进行编辑,直到它运行为止。然后我会在我的答案中添加它。给我几分钟。 @Bajor 完成。希望对您有所帮助。 它无法为我构建:错误:规则只能有一个资源源(提供的资源和测试+包含 @Bajor 你需要先创建一个新项目。使用vue create Projectname

以上是关于为啥 vue.js 在 html 文件中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复子字符串在 vue.js 3 中不起作用?

为啥可选择的项目列表在 Django 中不起作用?

为啥 js 文件在另一个文件夹中不起作用?

物化表单在 vue.js 组件中不起作用

为啥媒体查询在 Angular8 中不起作用

v-cloak 在 vue.js 中不起作用?