核心概念
在 Vue.js 中,“应用”(Application)是指整个 Vue 项目的一个实例。它是 Vue 应用的基础结构和运行的起点,负责管理和协调所有的组件、状态、路由、和其他功能模块。 一个 Vue 应用通常是由一个 Vue 实例或多个 Vue 实例组成,通过实例化 Vue 对象创建应用。应用实例负责初始化应用的根组件,并提供应用范围内的配置和资源,例如插件、全局状态管理等。
基本结构
一、主文件 main.js或main.ts
- 应用的入口文件,负责初始化和配置 Vue 应用实例。
// main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
const app = createApp(App);
app.use(router);
app.use(store);
app.mount('#app');
二、根组件 (App.vue)
- 应用的根组件,通常用作应用的顶层容器,包含应用的基本结构和逻辑。
<!-- App.vue -->
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App'
};
</script>
<style>
/* 全局样式 */
</style>
三、路由(Router)
- 定义应用的页面导航和 URL 路径的映射关系。
// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';
const routes = [
{ path: '/', name: 'Home', component: Home },
{ path: '/about', name: 'About', component: About }
];
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
});
export default router;
四、状态管理(Store)
- 管理应用的全局状态,可以使用 Vuex 或者其他状态管理库。
// store/index.js
import { createStore } from 'vuex';
const store = createStore({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
}
});
export default store;
五、组件
- Vue 应用是由多个组件组成的,组件是应用的基本构建块。
如,一个按钮组件:
<!-- ButtonComponent.vue -->
<template>
<button @click="handleClick">Click Me</button>
</template>
<script>
export default {
methods: {
handleClick() {
this.$emit('clicked');
}
}
};
</script>
<style>
button {
background-color: blue;
color: white;
}
</style>
应用生命周期
1、创建:实例初始化、根组件加载
2、挂载:实例挂载在DOM上,渲染根组件
3、更新:数据发生变化,重新渲染组件
4、销毁:示例被销毁,事件监听器和DOM被移除
应用配置
应用可以通过创建实例时传入配置选项进行配置
- 根组件:使用
render方法指定根组件
createApp({
render: h => h(App)
});
- 全局方法和属性:通过
app.config配置全局属性或方法
app.config.globalProperties.$myGlobalMethod = function() { /* ... */ };
- 插件:使用
app.use注册插件
app.use(myPlugin);
应用示例
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<title>My Vue App</title>
</head>
<body>
<div id="app"></div>
<script src="/path/to/main.js"></script>
</body>
</html>
// main.js
import { createApp } from 'vue';
import App from './App.vue';
createApp(App).mount('#app');
<!-- App.vue -->
<template>
<div id="app">
<h1>Welcome to My Vue App</h1>
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello, Vue!'
};
}
};
</script>
<style>
#app {
text-align: center;
color: #2c3e50;
}
</style>