Vue.js 学习指南:指令、组件和通信实战

本文介绍了Vue.js的基础概念,包括创建Vue实例、指令的使用(如v-bind和v-model)、计算属性和监听属性、VueRouter的安装与配置、组件开发以及组件的生命周期管理。
摘要由CSDN通过智能技术生成

目录

一、Vue.js的基础概念

        1.什么是vue实例?

        2.如何创建vue实例? 

二、指令

 三、计算属性和监听属性

1.计算属性

2.监听属性

四、路由 

1. 安装 Vue Router 

2.Vue实例 

 3.创建index.js

 4.配置路由出口

 5. 配置路由链接

6. 导航守卫 

五、组件 

 六、生命周期


在学习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-ifv-forv-bindv-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 组件的主要生命周期钩子:

  1. beforeCreate:

    • 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。在此阶段,实例的选项对象已经被解析成响应式的数据,但是实例上的 data 属性和方法尚未被初始化。
  2. created:

    • 在实例创建完成后被立即调用。在这一步,实例已经完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前尚不可用。
  3. beforeMount:

    • 在挂载开始之前被调用:相关的 render 函数首次被调用。
  4. mounted:

    • el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。
  5. beforeUpdate:

    • 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
  6. updated:

    • 由于数据更改导致的虚拟 DOM 重新渲染和打补丁时调用。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而,在大多数情况下,应该避免在此期间更改状态。
  7. beforeDestroy:

    • 在实例销毁之前调用。在这一步,实例仍然完全可用。
  8. destroyed:

    • 在实例销毁之后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例被销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cqssss_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值