目录
在学习vue2之前,通常都需要掌握基础的JavaScript知识,包括变量、数据类型、函数、对象等。
一、Vue.js的基础概念
1.什么是vue实例?
Vue实例是Vue.js应用的基本构建块。每个Vue应用都是通过创建一个Vue实例来启动的。
2.如何创建vue实例?
1.安装vue
# 在终端中使用以下命令安装Vue CLI
npm install -g @vue/cli
# 通过以下命令创建一个新的Vue项目
vue create my-vue-app
# 进入项目目录
cd my-vue-app
# 启动项目
npm run serve
2.如果不使用vue cli也可以通过引入Vue的CDN来实现
<!-- 在<head>标签内引入Vue的CDN -->
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<!-- 在<body>标签内创建一个挂载点 -->
<div id="app"></div>
<!-- 在<script>标签内创建Vue实例 -->
<script>
// 创建Vue实例
var app = new Vue({
el: '#app', // 挂载点,这里是id为app的div
data: {
message: 'Hello Vue!'
},
methods: {
greet() {
alert(this.message);
}
}
});
</script>
二、指令
在Vue.js中,指令是带有 v-
前缀的特殊属性,用于在DOM元素上添加特定的行为 。
Vue 提供了一系列指令,如 v-if
、v-for
、v-bind
、v-on
等,用于操作 DOM 元素、数据绑定等。
- v-bind
用于动态绑定元素的属性。可以用来绑定HTML属性、DOM属性、样式、class等。
<div v-bind:class='className1'></div>
<!-- 也可以简写成以下样式 -->
<div :class='className1'></div>
- v-model
用于在表单元素上创建双向数据绑定。当输入框的值变化时,与之绑定的数据也会更新,反之亦然。
<div id="app">
<input type="text" v-model="msg">
<p>{{msg}}</p>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
msg:''
}
},
})
</script>
- v-for
用于循环渲染数组或对象的数据,生成列表。
<div id="app">
<ul>
<li v-for="(item,index) in list" :key="index">{{ item }}</li>
</ul>
</div>
<script>
new vue({
el:"#app",
data(){
return{
list: [
{ text: '首页', isActive: true },
{ text: '列表', isActive: false },
{ text: '详情', isActive: false },
{ text: '登录', isActive: false },
{ text: '注册', isActive: false }
],
}
}
})
</script>
- v-if、v-else-if、v-else
用于条件性地渲染元素。<p v-if="seen">现在你看到我了</p> <p v-else>你看不到我了</p>
- v-show
与v-if
类似,用于条件性地显示或隐藏元素,但不会删除元素。
<p v-show="seen">可以被看见</p>
- v-on
用于绑定事件监听器,监听DOM事件,执行相应的方法。
<button v-on:click="handleClick">按钮1</button>
<!-- 可以缩写成以下方式 -->
<button @click="handleClick">按钮2</button>
三、计算属性和监听属性
在 Vue.js 中,计算属性和监听属性都是用来监听数据变化并执行相应逻辑的机制,但它们的使用场景和实现方式略有不同。
1.计算属性
计算属性是基于其它属性计算得出的属性,它会根据依赖的属性的变化而动态更新。计算属性在模板中的用法类似数据属性,但其实际上是一个函数。计算属性具有缓存机制,只有当计算属性的依赖发生变化时,才会重新计算。
<template>
<div>
<p>{{ fullName }}</p>
</div>
</template>
<script>
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe'
};
},
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
};
</script>
2.监听属性
监听属性允许你监听数据的变化并在变化时执行自定义的函数。它更灵活,适用于当你需要在数据变化时执行异步操作或较复杂逻辑的场景。
<template>
<div>
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe',
message: ''
};
},
watch: {
firstName(newValue, oldValue) {
this.message = `firstName changed from ${oldValue} to ${newValue}`;
},
lastName(newValue, oldValue) {
this.message = `lastName changed from ${oldValue} to ${newValue}`;
}
}
};
</script>
四、路由
在Vue.js中,路由是一种用于管理单页面应用导航的机制。Vue Router 是 Vue.js 的官方路由管理器,它允许你通过 URL 来映射到对应的组件,实现页面之间的切换而无需刷新整个页面。
1. 安装 Vue Router
使用npm或yarn安装Vue Router
#使用yarn的方式
yarn add vue-router
#使用npm的方式
npm install vue-router
2.Vue实例
在安装路由之后会自动在main.js下创建一个router实例
import Vue from 'vue'
import App from './App.vue'
import router from './router'
new Vue({
router,
render: h => h(App)
}).$mount('#app')
3.创建index.js
在 index.js 中放置路由的配置
import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from '@/components/Home.vue';
import About from '@/components/About.vue';
Vue.use(VueRouter);
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About },
// 添加其他路由配置
];
const router = new VueRouter({
routes,
});
export default router;
4.配置路由出口
在App.vue或其他根组件中,配置路由的出口,使用<router-view>
来显示当前路由对应的组件
<!-- App.vue -->
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
};
</script>
5. 配置路由链接
在应用中,使用<router-link>
创建路由链接,实现页面间的导航
<!-- App.vue -->
<template>
<div id="app">
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-view></router-view>
</div>
</template>
6. 导航守卫
vue Router 提供了导航守卫,可以在路由发生变化时执行一些逻辑。例如,beforeEach
可以用来进行路由拦截
router.beforeEach((to, from, next) => {
// 判断用户 是否访问 登陆页面 如果是直接放行
if (to.path == '/' || to.path == '/login') {
return next()
}
// 获取本地token 值
const tokenStr = window.localStorage.getItem("token");
// 判断值 是否存储 如果不存在 直接跳转到 登陆页面
if (!tokenStr) {
return next('/')
}
// 放行
next()
})
五、组件
Vue 组件是 Vue.js 应用的基本构建块,它允许你将用户界面拆分为独立、可重用的模块。每个组件都可以包含自己的模板、样式和逻辑,并且可以通过 props 和 events 进行数据传递和通信。
<!-- ChildParentCommunication.vue (子组件兼父组件) -->
<template>
<div>
<p>{{ receivedMessage }}</p>
<button @click="sendMessageToParent">向父组件发送消息</button>
</div>
</template>
<script>
export default {
props: {
// 通过 props 接收父组件传递的消息
messageFromParent: String,
},
data() {
return {
sentMessage: "你好,父组件!",
receivedMessage: "",
};
},
watch: {
// 监听父组件传递的消息变化
messageFromParent(newMessage) {
this.receivedMessage = `从父组件接收的消息:${newMessage}`;
}
},
methods: {
// 发送消息给父组件
sendMessageToParent() {
this.$emit('messageToParent', '你好,父组件!来自子组件的消息。');
}
},
};
</script>
<!-- Parent.vue (父组件) -->
<template>
<div>
<child-parent-communication
:messageFromParent="sentMessage"
@messageToParent="handleMessageFromChild">
</child-parent-communication>
<button @click="sendMessageToChild">向子组件发送消息</button>
</div>
</template>
<script>
import ChildParentCommunication from "@/components/ChildParentCommunication.vue";
export default {
components: {
ChildParentCommunication,
},
data() {
return {
sentMessage: "你好,子组件!",
};
},
methods: {
// 处理来自子组件的消息
handleMessageFromChild(message) {
this.sentMessage = `从子组件接收的消息:${message}`;
},
// 发送消息给子组件
sendMessageToChild() {
this.sentMessage = "来自父组件的更新消息!";
}
},
};
</script>
六、生命周期
在 Vue.js 中,每个组件都有生命周期钩子函数,这些钩子函数允许你在组件的不同阶段执行代码。以下是 Vue.js 组件的主要生命周期钩子:
-
beforeCreate:
- 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。在此阶段,实例的选项对象已经被解析成响应式的数据,但是实例上的 data 属性和方法尚未被初始化。
-
created:
- 在实例创建完成后被立即调用。在这一步,实例已经完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前尚不可用。
-
beforeMount:
- 在挂载开始之前被调用:相关的 render 函数首次被调用。
-
mounted:
- el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。
-
beforeUpdate:
- 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
-
updated:
- 由于数据更改导致的虚拟 DOM 重新渲染和打补丁时调用。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而,在大多数情况下,应该避免在此期间更改状态。
-
beforeDestroy:
- 在实例销毁之前调用。在这一步,实例仍然完全可用。
-
destroyed:
- 在实例销毁之后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例被销毁。