当前位置: 首页 > news >正文

《从零到全栈:Vue2入门宝典》

1. Vue 简介

1.1 什么是 Vue?

        Vue 是一套用于构建用户界面的渐进式框架。Vue 的核心库专注于视图层,易于与其他库或现有项目集成。Vue 的目标是通过尽可能简单的 API 实现数据双向绑定组件化开发

1.2 什么是“渐进式”?

        “渐进式”意味着 Vue 可以逐步应用到项目中。你可以从简单的页面交互开始,逐步引入 Vue 的更多功能,如组件化、路由、状态管理等,而不需要一开始就全面重构项目。

1.3 Vue 的核心特性

  • 数据双向绑定:Vue 通过 MVVM 模式实现数据与视图的双向绑定,数据的变化会自动反映在视图上,视图的变化也会同步到数据。

  • 组件化开发:Vue 允许将页面拆分为多个可复用的组件,每个组件都有自己的逻辑和样式,便于维护和复用。

  • 响应式系统:Vue 的响应式系统能够自动追踪数据的变化,并更新视图。

2. Vue 的响应式原理

2.1 Vue2 的响应式实现

        Vue2 使用 Object.defineProperty 来实现数据的响应式。通过为对象的每个属性设置 gettersetter,Vue 能够监听数据的变化并触发视图更新。

Object.defineProperty(obj, key, {get() {// 读取属性时的回调},set(newValue) {// 设置属性时的回调}
});

2.2 Vue3 的响应式实现

        Vue3 使用 Proxy 替代了 Object.definePropertyProxy 可以监听整个对象的变化,而不需要为每个属性单独设置 gettersetter,性能更好且支持更多的操作。

3. 为什么要使用 Vue?

  1. 减少繁琐的 DOM 操作:Vue 通过数据驱动视图,开发者无需手动操作 DOM。

  2. 数据响应式:Vue 自动追踪数据变化并更新视图,开发者可以更专注于业务逻辑。

  3. 提高开发效率:Vue 提供了丰富的工具和生态,如 Vue CLI、Vue Router、Vuex 等,能够快速构建复杂的单页应用。

  4. 完整的生态圈:Vue 拥有完善的生态系统,支持声明式编程、组件化开发、路由管理、状态管理等。

4. Vue 的基本使用

4.1 引入 Vue

可以通过以下两种方式引入 Vue:

        1. 原生引入:通过 <script> 标签直接引入 Vue 文件。

<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

        2. 工程化引入:使用构建工具如 Webpack、Vue CLI 或 Vite 来构建 Vue 项目。

4.2 初始化 Vue 程序

new Vue({el: '#app', // 挂载点data() {return {msg: 'Hello Vue!'};}
});

5. Vue 的基础语法

5.1 模板语法

        Vue 使用双大括号 {{ }} 进行插值,支持 JS 表达式。

<div id="app">{{ msg }}
</div>

5.2 指令

Vue 提供了多种指令来操作 DOM:

  • v-model:实现表单元素与数据的双向绑定。

  • v-html:渲染 HTML 内容。

  • v-text:渲染纯文本。

  • v-bind:动态绑定属性,简写为 :

  • v-on:绑定事件,简写为 @

  • v-if / v-show:条件渲染。

  • v-for:列表渲染。

5.3 计算属性与侦听器

  • 计算属性computed 用于定义依赖其他属性的计算属性。

    computed: {fullName() {return this.firstName + ' ' + this.lastName;}
    }
  • 侦听器watch 用于监听数据的变化并执行相应的操作。

    watch: {msg(newVal, oldVal) {console.log('msg changed:', newVal);}
    }

5.4 过滤器

        过滤器用于对数据进行格式化处理。

<p>{{ msg | capitalize }}</p>filters: {capitalize(value) {return value.toUpperCase();}
}

6. Vue 组件

6.1 组件的定义与使用

        组件是 Vue 的核心概念之一,允许将页面拆分为多个可复用的模块。

const MyComponent = {template: '<div>{{ msg }}</div>',data() {return {msg: 'Hello Component!'};}
};new Vue({el: '#app',components: {'my-component': MyComponent}
});

6.2 组件通信

  • 父传子:通过 props 传递数据。

    // 父组件
    <child :msg="parentMsg"></child>// 子组件
    props: ['msg']
  • 子传父:通过 $emit 触发事件并传递数据。

    // 子组件
    this.$emit('update', newValue);// 父组件
    <child @update="handleUpdate"></child>
  • 兄弟组件通信:通过事件总线或 Vuex 进行通信。

7. Vue 的生命周期

Vue 组件的生命周期分为 4 个阶段,每个阶段都有对应的钩子函数:

  1. 创建阶段beforeCreatecreated

  2. 挂载阶段beforeMountmounted

  3. 更新阶段beforeUpdateupdated

  4. 销毁阶段beforeDestroydestroyed

    new Vue({el: '#app',data() {return {msg: 'Hello Vue!'};},created() {console.log('组件创建完成');},mounted() {console.log('组件挂载完成');}
    });

8. Vue 路由 (Vue Router)

8.1 路由的基本使用

        Vue Router 是 Vue 的官方路由管理器,用于实现单页应用中的页面导航。

const router = new VueRouter({routes: [{ path: '/', component: Home },{ path: '/about', component: About }]
});new Vue({router,el: '#app'
});

8.2 路由传参

  • 查询参数:通过 query 传递参数。

    this.$router.push({ path: '/detail', query: { id: 1 } });
  • 动态路由:通过 params 传递参数。

    this.$router.push({ name: 'detail', params: { id: 1 } });

8.3 路由守卫

        路由守卫用于在导航过程中进行拦截或权限控制。

router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !isAuthenticated) {next('/login');} else {next();}
});

9. Vue 过渡与动画

        Vue 提供了 <transition> 组件来实现元素的过渡和动画效果。

<transition name="fade"><div v-if="show">Hello Vue!</div>
</transition><style>
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {opacity: 0;
}
</style>

10. Vue 混入 (Mixin)

        混入是一种代码复用的方式,允许将组件的选项(如 datamethods 等)提取到一个单独的对象中,并在多个组件中复用。

const myMixin = {data() {return {msg: 'Hello Mixin!'};}
};new Vue({mixins: [myMixin],el: '#app'
});

11. 自定义指令

        Vue 允许开发者自定义指令来扩展 DOM 操作。

<input v-focus>Vue.directive('focus', {inserted(el) {el.focus();}
});

12. Vue 项目构建

12.1 Vue CLI 脚手架

1. 脚手架简介

        Vue CLI 是 Vue 官方提供的工程化项目构建工具,能够快速生成标准化的 Vue 项目结构,集成 Webpack、Babel、ESLint 等工具链。

2. 安装与使用
# 全局安装
npm install -g @vue/cli# 验证安装
vue --version# 创建项目 (命令行)
vue create project-name# 可视化创建 (浏览器打开)
vue ui
3. 项目结构

生成的项目包含以下核心文件:

  • src/main.js: 入口文件

  • src/App.vue: 根组件

  • src/router/: 路由配置目录

  • src/views/: 页面级组件目录


13. Vue Router 路由系统

13.1 路由核心概念
  • SPA (单页应用):通过 URL 映射不同组件,实现无刷新页面切换

  • 动态路由:通过参数匹配不同内容(如 /user/:id

  • 嵌套路由:父子层级的页面结构

  • 编程式导航:通过 JS 控制页面跳转

13.2 路由配置流程
        (1) 安装路由
npm install vue-router@3.0.0  # Vue2 使用 3.x 版本
        (2) 路由配置文件

      src/router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'Vue.use(VueRouter)const routes = [{path: '/',redirect: '/list'  // 重定向},{path: '/list',name: 'list',component: () => import('@/views/ListView.vue')  // 懒加载},{path: '/detail/:id',  // 动态路由name: 'detail',component: () => import('@/views/DetailView.vue')}
]const router = new VueRouter({routes
})export default router
        (3) 挂载路由

     src/main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'new Vue({router,  // 注入路由实例render: h => h(App)
}).$mount('#app')

14. 路由传参方式对比

方式语法示例获取方法特点
Query 参数/detail?id=1this.$route.query.id参数明文显示在 URL
Params 参数/detail/1 + path: '/detail/:id'this.$route.params.id需定义动态路由,刷新后参数保留
命名路由传参{ name: 'detail', params: { id:1 } }this.$route.params.id需配置路由 name,参数不在 URL 显示
示例代码

        List.vue 传递参数:

<router-link :to="{ path: '/detail', query: { id: 1, type: '旅游' }}">链接1</router-link>
<router-link :to="{ name: 'detail', params: { id: 2 }}">链接2</router-link>

        Detail.vue 接收参数:

export default {created() {console.log('Query参数:', this.$route.query.id)console.log('Params参数:', this.$route.params.id)}
}

15. 路由守卫

15.1 全局守卫

   router/index.js

router.beforeEach((to, from, next) => {// 1. 权限验证示例if (to.meta.requiresAuth && !isLogin) {next('/login')} // 2. 放行路由else {next()}
})

15.2 路由独享守卫

{path: '/admin',component: AdminPage,beforeEnter: (to, from, next) => {if (!isAdmin) next('/403')else next()}
}

15.3 组件内守卫

   DetailView.vue

export default {beforeRouteEnter(to, from, next) {// 组件渲染前调用next(vm => {// 通过 vm 访问组件实例})},beforeRouteLeave(to, from, next) {// 离开组件时调用const answer = confirm('确定离开?')answer ? next() : next(false)}
}

16. 嵌套路由

16.1 配置嵌套路由

   router/index.js

{path: '/user',component: UserLayout,children: [{ path: 'profile',  // 匹配 /user/profilecomponent: UserProfile },{ path: 'settings', // 匹配 /user/settingscomponent: UserSettings }]
}

16.2 父组件模板

   UserLayout.vue

<template><div><h2>用户中心</h2><router-view></router-view> <!-- 子路由出口 --></div>
</template>

17. 路由模式

模式特点配置方法
Hash 模式URL 带 #,兼容性好默认模式,无需配置
History 模式#,需要服务器支持mode: 'history'
const router = new VueRouter({mode: 'history',routes
})

18. 常见问题解决

18.1 页面刷新后 Params 参数丢失

  • 使用 Query 参数替代

  • 将参数存储在 Vuex 或 localStorage 中

18.2 路由重复跳转报错

// 捕获重复导航错误
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {return originalPush.call(this, location).catch(err => err)
}

总结

        Vue 是一个功能强大且易于上手的渐进式框架,适合从简单的页面交互到复杂的单页应用开发。通过 Vue 的响应式系统、组件化开发、路由管理、状态管理等特性,开发者可以高效地构建现代化的 Web 应用。


 希望这份整理对你有帮助!如果需要进一步细化某部分内容,可以告诉我! 😊 


http://www.mrgr.cn/news/92583.html

相关文章:

  • 多元数据直观表示(R语言)
  • 工业AR眼镜的‘芯’动力:FPC让制造更智能【新立电子】
  • linux--多进程开发(6)IPC之内存映射
  • 【Jenkins】个人向-Jenkinsfile如何写
  • Git:多人协作
  • 1.2.2 使用Maven方式构建Spring Boot项目
  • 七、Three.jsPBR材质与纹理贴图
  • C++初阶—list类
  • 趣讲TCP三次握手
  • python3GUI--Fun!音乐播放器 By:PyQt5(附下载地址)
  • Ollama 简介及安装部署
  • 操作系统:设备与I/O管理
  • 完全数和质数算法详解
  • Ultralytics导出的Engine模型直接加载报错
  • 【缓存】缓存雪崩与缓存穿透:高并发系统的隐形杀手
  • STM32学习【4】ARM汇编(够用)
  • javaweb文件上传:@MultipartConfig注解与Apache Commons FileUpload对比
  • Visual Studio Code 远程开发方法
  • Metal学习笔记八:纹理
  • 【前端基础】Day 4 CSS盒子模型