用vite创建vue3单页面程序

我们将介绍如何在本地搭建 Vue 单页应用。创建的项目将使用基于 Vite 的构建设置,并允许我们使用 Vue 的单文件组件 (SFC)。

确保你安装了最新版本的 Node.js,并且你的当前工作目录正是打算创建项目的目录。在命令行中运行以下命令

npm create vue@latest

 再执行这三行

cd <your-project-name>
npm install
npm run dev 

生成的项目中的示例组件使用的是组合式 API 和 <script setup>,而非选项式 API 。

组合式 API (Composition API)

通过组合式 API,我们可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与 <script setup> 搭配使用。这个 setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。比如,<script setup> 中的导入和顶层变量/函数都能够在模板中直接使用。

<script setup>
import { ref, onMounted } from 'vue'

// 响应式状态
const count = ref(0)

// 用来修改状态、触发更新的函数
function increment() {
  count.value++
}

// 生命周期钩子
onMounted(() => {
  console.log(`The initial count is ${count.value}.`)
})
</script>

<template>
  <button @click="increment">Count is: {{ count }}</button>
</template>

选项式 API (Options API)

使用选项式 API,我们可以用包含多个选项的对象来描述组件的逻辑,例如 datamethods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例。

<script>
export default {
  // data() 返回的属性将会成为响应式的状态
  // 并且暴露在 `this` 上
  data() {
    return {
      count: 0
    }
  },

  // methods 是一些用来更改状态与触发更新的函数
  // 它们可以在模板中作为事件处理器绑定
  methods: {
    increment() {
      this.count++
    }
  },

  // 生命周期钩子会在组件生命周期的各个不同阶段被调用
  // 例如这个函数就会在组件挂载完成后被调用
  mounted() {
    console.log(`The initial count is ${this.count}.`)
  }
}
</script>

<template>
  <button @click="increment">Count is: {{ count }}</button>
</template>

两者对比 

代码 

其中app.vue是项目的根组件,相当于网站的首页,该组件的实例将挂载到index.html页面中,在根组件中使用路由完成页面的展示与跳转,其代码结构如下所示 

<template>  
    <div id="app">  
        <img src="./assets/logo.png">  
        <router-view />  
    </div>  
</template>  
  
<script>  
    export default {  
        name: 'App'  
    }  
</script>

Main.js文件是应用入口函数,类似c语言的main函数,主要任务是引入全局使用的插件、组件、模块库、样式等,将根组件挂载到页面的某一个dom结点上。在项目启动时,首先加载此文件,创建根组件实例,其代码如下所示。 

//引入组件或js插件或文件
import { createApp } from 'vue'    //引入createApp函数,用于创建vue实例
import App from './App.vue'    //引入根结点组件,定义其名称为“App”
// import router from './router'  //引入路由
// import { createPinia } from 'pinia'  //引入状态管理组件函数
  
 const app = createApp(App)  //创建vue实例

/* app.use(组件)语句,在此定义后,可以在这个vue项目任意地方使用该组件*/
// app.use(router)
// app.use(createPinia())
app.mount('#app')

编写简单的单页面应用程序 

打开app.vue文件,在此文件中编写欢迎信息,示例代码如下所示。 

<template>   //模板语言
  <div id="app">  
    <h1>{{msg}}</h1>  
  </div>  
</template>  
  
<script>  
  export default {  
    name: 'helloWorld',  
    data() {  
        return {     //vue组件中的数据
            msg: '欢迎学习vue单页面开发'  
        }  
    }  
  }  
</script>  
  
<style scoped="scoped">   //定义该组件的样式
  #app {  
    font-family: 'Avenir', Helvetica, Arial, sans-serif;  
    -Webkit-font-smoothing: antialiased;  
    -moz-osx-font-smoothing: grayscale;  
    text-align: center;  
    color: #2c3e50;  
    margin-top: 60px;  
  }  
</style>  

 程序进阶

通常app.vue是单页面程序中的根组件,职责是与外壳页面建立联系和页面导航,不承担具体的业务功能,业务功能通常写在子组件中。编写一个名为HelloWorld的组件,它是App.vue的子组件,根据输入的姓名,展示“欢迎学习vue,winkle”,代码如下所示 

<template>  
  <div>  
    <h1>{{ msg }},{{userName.toUpperCase()}}!</h1>  
    <label>姓名:<input type="text" v-model="userName" placeholder="请输入用户姓名" /></label>  
  </div>  
</template>  
  
<script>  
export default {  
  name: 'HelloWorld',  
  data () {  
    return {  
      msg: '欢迎学习Vue',  
      userName: 'winkle'  
    }  
  }  
}  
</script>  
  
<style scoped>  
  h1{  
    font-weight: normal;  
  }  
</style>

修改app.vue文件中模板文件,引入组件HelloWorld,代码如下所示 

<template>  
  <div id="app">  
     <hello-world></hello-world>  
  </div>  
</template>     
<script>
import HelloWorld from '@/components/HelloWorld.vue'   
 export default {  
  name: 'App',
  components: {  
          HelloWorld: HelloWorld  
       } 
}
</script>

 在vite.config.ts文件里的代码:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vite.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': 'C:\\Users\\27743\\vite-demo\\src' // 确保这个路径正确指向您的 src 目录
    }
  }
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值