首页 > 编程语言 >JavaScript 第25章:Vue 基础

JavaScript 第25章:Vue 基础

时间:2024-10-22 13:52:36浏览次数:10  
标签:25 Vue index JavaScript state 待办 import Vuex

在学习JavaScript的第25章关于Vue的基础知识时,我们将从以下几个方面来了解Vue框架,并通过一个实战案例来巩固所学的知识。

Vue概述

Vue.js是一个用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,易于上手,同时也非常灵活。结合现代化的工具链和各种支持类库,Vue可以为复杂的单页应用提供驱动。

指令与表达式

Vue提供了多种内置指令来绑定DOM属性到Vue实例的数据。最常用的指令是v-bind用于动态绑定属性,v-on用于监听DOM事件,还有v-if用于条件渲染等。表达式则可以在双大括号{{ }}中使用,用来展示数据模型中的值。

示例代码:
<div id="app">
  {{ message }}
</div>

<script>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})
</script>

组件与插槽

Vue中的组件是用来创建可复用的UI代码块。每个组件都可以被看作是一个自包含的单元,有自己的选项和生命周期。Vue还允许使用<slot>标签来实现内容分发,这样父组件可以向子组件中插入内容。

示例代码:
<!-- 子组件 -->
<template>
  <div class="child">
    <slot>默认插槽内容</slot>
  </div>
</template>

<script>
export default {
  name: 'ChildComponent'
}
</script>

<!-- 父组件 -->
<template>
  <div>
    <child>
      <!-- 插入的内容 -->
      <span>这是来自父组件的内容</span>
    </child>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  }
}
</script>

计算属性与侦听器

计算属性是一种依赖于其他数据属性而变化的属性。它们在模板中使用时会自动触发重新计算。当依赖项改变时,计算属性也会重新计算。侦听器则用于监听数据的变化并执行一些副作用。

示例代码:
data() {
  return {
    fullName: 'John Doe',
    firstName: 'John',
    lastName: 'Doe'
  };
},
computed: {
  reversedName() {
    return this.fullName.split('').reverse().join('');
  }
},
watch: {
  firstName(newVal, oldVal) {
    console.log(`First name changed from ${oldVal} to ${newVal}`);
  },
  lastName(newVal, oldVal) {
    console.log(`Last name changed from ${oldVal} to ${newVal}`);
  }
}

实战案例:简单的Vue应用

假设我们要创建一个简单的待办事项列表应用。这个应用将包括添加待办事项的功能,以及删除待办事项的功能。

源码示例:
<div id="app">
  <h1>我的待办事项</h1>
  <input v-model="newItem" @keyup.enter="addTodo">
  <button @click="addTodo">添加</button>
  <ul>
    <li v-for="(item, index) in items" :key="index">
      {{ item.text }}
      <button @click="removeTodo(index)">删除</button>
    </li>
  </ul>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    newItem: '',
    items: []
  },
  methods: {
    addTodo() {
      if (this.newItem.trim()) {
        this.items.push({ text: this.newItem });
        this.newItem = '';
      }
    },
    removeTodo(index) {
      this.items.splice(index, 1);
    }
  }
});
</script>

在这个例子中,我们使用了v-model双向绑定输入框的值,并且在回车或点击按钮时调用addTodo方法将新的待办事项添加到列表中。同时,每个列表项都有一个删除按钮,点击后调用removeTodo方法移除对应的项。这个简单的应用展示了Vue的基本功能,如数据绑定、事件处理以及数组操作。

当然,我们可以进一步扩展这个简单的待办事项应用,增加更多的功能,比如完成状态切换、过滤显示(仅显示未完成的或已完成的任务)等等。下面是一个更完整的版本:

扩展功能:完成状态切换与过滤

在这个扩展的应用中,我们将添加一个复选框来标记任务是否已完成,并且添加一个过滤器来选择性地显示任务。

源码示例:
<div id="app">
  <h1>我的待办事项</h1>
  <input v-model="newItem" placeholder="输入新任务">
  <button @click="addTodo">添加</button>
  <label>
    <input type="checkbox" v-model="showCompleted">
    显示已完成
  </label>
  <ul>
    <li v-for="(item, index) in filteredItems" :key="index">
      <input type="checkbox" v-model="item.completed">
      <span :class="{ completed: item.completed }">{{ item.text }}</span>
      <button @click="removeTodo(index)">删除</button>
    </li>
  </ul>
</div>

<style scoped>
.completed {
  text-decoration: line-through;
}
</style>

<script>
new Vue({
  el: '#app',
  data: {
    newItem: '',
    items: [],
    showCompleted: false,
  },
  computed: {
    // 过滤未完成/已完成的任务
    filteredItems() {
      if (this.showCompleted) {
        return this.items;
      } else {
        return this.items.filter(item => !item.completed);
      }
    }
  },
  methods: {
    addTodo() {
      if (this.newItem.trim()) {
        this.items.push({ text: this.newItem, completed: false });
        this.newItem = '';
      }
    },
    removeTodo(index) {
      this.items.splice(index, 1);
    }
  }
});
</script>

在这个扩展版中,我们添加了一个复选框showCompleted,当它被选中时,所有任务都会显示;否则,只有未完成的任务会被显示出来。我们还给每个任务添加了一个复选框来标记任务是否已完成,并且根据item.completed的状态来调整文本样式。

这个应用展示了如何使用Vue的计算属性进行条件筛选、使用v-model进行双向数据绑定以及如何根据数据动态更改元素的CSS类。

以上就是对Vue基础知识的一个总结和一个实战案例的介绍。这些概念是构建更复杂Vue应用程序的基础。随着你对Vue的理解加深,你可以开始探索更高级的主题,例如路由管理、状态管理(如Vuex)、服务端渲染等。

接下来,让我们继续深入探讨Vue的一些更高级特性,以及如何将这些特性应用到我们的待办事项应用中以增强其功能性和可维护性。

更高级特性:路由管理与状态管理

路由管理(Vue Router)

对于稍微复杂一点的应用,可能需要多个视图页面。Vue Router 是一个官方路由管理器,它和Vue.js的核心深度集成,让构建单页面应用变得简单。

如果你的应用需要多个页面,可以考虑引入Vue Router来管理不同的视图。这里不会具体实现路由管理,但是可以简要说明一下它的用法:

  1. 安装Vue Router:

    npm install vue-router
    
  2. 创建一个路由配置文件,定义你的路由规则:

    import Vue from 'vue';
    import VueRouter from 'vue-router';
    
    Vue.use(VueRouter);
    
    const routes = [
      { path: '/', component: Home },
      { path: '/todos', component: Todos },
      // 可以添加更多路径
    ];
    
    export default new VueRouter({ routes });
    
  3. 在主应用文件中引入路由配置,并使用路由配置:

    import router from './router'; // 引入路由配置
    
    new Vue({
      el: '#app',
      router, // 使用路由配置
      render: h => h(App)
    });
    
状态管理(Vuex)

对于共享状态的应用,状态管理变得尤为重要。Vuex 是Vue官方的状态管理模式,它可以帮助我们更好地管理全局状态。

同样地,这里不具体实现Vuex,但可以给出基本的步骤:

  1. 安装Vuex:

    npm install vuex
    
  2. 创建一个Vuex store文件,定义state、mutations、actions等:

    import Vue from 'vue';
    import Vuex from 'vuex';
    
    Vue.use(Vuex);
    
    const store = new Vuex.Store({
      state: {
        todos: [] // 初始化状态
      },
      mutations: {
        addTodo(state, todo) {
          state.todos.push(todo);
        },
        removeTodo(state, index) {
          state.todos.splice(index, 1);
        }
      },
      actions: {
        addTodo({ commit }, todo) {
          commit('addTodo', todo);
        },
        removeTodo({ commit }, index) {
          commit('removeTodo', index);
        }
      }
    });
    
    export default store;
    
  3. 在Vue组件中使用store:

    export default {
      methods: {
        addTodo(todo) {
          this.$store.dispatch('addTodo', todo);
        },
        removeTodo(index) {
          this.$store.dispatch('removeTodo', index);
        }
      }
    };
    

总结

通过上述介绍,你应该对Vue.js及其周边生态有了更深的认识。对于一个实际项目而言,通常会结合Vue Router来管理多页面的导航逻辑,以及使用Vuex来集中管理应用的状态。这不仅有助于提高代码的可维护性,还能使应用更加健壮和易于扩展。

如果你有兴趣深入了解这些高级特性,建议阅读官方文档并尝试自己动手实践。官方文档通常是最全面且准确的信息来源。

既然我们已经讨论了Vue.js的一些基础特性和高级特性,现在让我们进一步扩展我们的待办事项应用,以便更好地演示这些高级特性的使用方式。

使用Vue Router实现多页面应用

为了使我们的待办事项应用更具实用性,我们可以添加一个新的页面来展示用户的个人信息或者设置选项。这里我们将创建一个简单的设置页面,并使用Vue Router来管理这两个页面之间的导航。

设置页面:
<!-- settings.html -->
<div>
  <h2>设置</h2>
  <p>这里是设置页面。</p>
</div>
更新主应用文件以使用Vue Router:
// main.js
import Vue from 'vue';
import App from './App.vue';
import router from './router'; // 引入路由配置

new Vue({
  router, // 使用路由配置
  render: h => h(App)
}).$mount('#app');
配置路由:
// router.js
import Vue from 'vue';
import VueRouter from 'vue-router';
import Todos from './components/Todos.vue'; // 待办事项页面
import Settings from './components/Settings.vue'; // 设置页面

Vue.use(VueRouter);

const routes = [
  { path: '/', component: Todos },
  { path: '/settings', component: Settings }
];

export default new VueRouter({ routes });
更新待办事项页面以包含导航链接:
<!-- App.vue -->
<div id="app">
  <nav>
    <router-link to="/">待办事项</router-link>
    <router-link to="/settings">设置</router-link>
  </nav>
  <router-view></router-view>
</div>

通过这种方式,用户可以方便地在待办事项页面和设置页面之间进行导航。

使用Vuex管理应用状态

现在,让我们改进待办事项应用的状态管理,使其更加模块化并且易于维护。我们将使用Vuex来管理待办事项列表。

创建Vuex Store:
// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    todos: []
  },
  mutations: {
    addTodo(state, todo) {
      state.todos.push(todo);
    },
    removeTodo(state, index) {
      state.todos.splice(index, 1);
    },
    toggleTodo(state, index) {
      state.todos[index].completed = !state.todos[index].completed;
    }
  },
  actions: {
    addTodo({ commit }, todo) {
      commit('addTodo', todo);
    },
    removeTodo({ commit }, index) {
      commit('removeTodo', index);
    },
    toggleTodo({ commit }, index) {
      commit('toggleTodo', index);
    }
  },
  getters: {
    todos(state) {
      return state.todos;
    }
  }
});
更新待办事项组件以使用Vuex Store:
// Todos.vue
import { mapActions, mapGetters } from 'vuex';

export default {
  computed: {
    ...mapGetters(['todos'])
  },
  methods: {
    ...mapActions(['addTodo', 'removeTodo', 'toggleTodo']),
    submitNewTodo(e) {
      e.preventDefault();
      if (!this.newTodoText.trim()) return;
      this.addTodo({ text: this.newTodoText, completed: false });
      this.newTodoText = '';
    }
  },
  template: `
    <form @submit.prevent="submitNewTodo">
      <input v-model="newTodoText" placeholder="输入新任务">
      <button type="submit">添加</button>
      <ul>
        <li v-for="(todo, index) in todos" :key="index">
          <input type="checkbox" :checked="todo.completed" @change="toggleTodo(index)">
          <span :class="{ completed: todo.completed }">{{ todo.text }}</span>
          <button @click="removeTodo(index)">删除</button>
        </li>
      </ul>
    </form>
  `
};

通过使用Vuex,我们现在可以更容易地管理待办事项的状态,并且使得组件间的通信更加简洁明了。

结语

通过以上步骤,我们不仅增强了待办事项应用的功能,还引入了Vue Router和Vuex,使得应用结构更加清晰且易于扩展。希望这些示例能帮助你更好地理解Vue.js以及如何使用其生态系统中的工具来构建复杂的应用程序。如果你有任何疑问或想要深入了解某个特定主题,请随时提问!

标签:25,Vue,index,JavaScript,state,待办,import,Vuex
From: https://blog.csdn.net/hummhumm/article/details/143107747

相关文章

  • vue-springboot基于JavaWeb的智慧养老院管理系统的设计与实现 附源码
    目录项目介绍系统实现截图源码获取地址下载技术栈开发核心技术介绍:为什么选择最新的Vue与SpringBoot技术核心代码部分展示项目介绍该系统从三个对象:由管理员和家属、护工来对系统进行设计构建。主要功能包括:个人信息修改,对家属信息、护工信息、老人入住、外出报备、......
  • JavaScript从零学起 —— 数据类型(进阶篇6)
    说明:此文章用作个人学习记录,若有任何问题或建议欢迎大家在评论区讨论文章目录前言一、日期(Date)1.Date类型的定义2.创建Date3.常用方法4.日期格式化5.常见问题与解决方案二、正则表达式(RegExp)1.正则表达式的定义2.创建正则表达式3.匹配常用字符4.常......
  • 【开源免费】基于SpringBoot+Vue.JS读书笔记共享平台(JAVA毕业设计)
    本文项目编号T029,文末自助获取源码\color{red}{T029,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS母婴商城系统 (JAVA毕业设计)
    本文项目编号T030,文末自助获取源码\color{red}{T030,文末自助获取源码}......
  • React和Vue哪个更适合前端开发
    在前端开发领域,React和Vue一直是两大热门框架。本文深入对比两者在不同维度的表现,包括:1.设计理念和学习曲线;2.数据绑定;3.组件化;4.生态系统和工具;5.性能;6.社区支持;7.企业采用和工作机会。通过全面的比较分析,我们可以发现React和Vue各有优势,选择哪一个框架更多地取决于项目......
  • windows IIS上部署Vue项目
    1.首先执行build命令打包vue项目npmrunbuild执行打包命令后生成的文件在dist文件夹内  2.新建web.config写入配置代码,放进打包后文件的根目录内https://blog.csdn.net/weixin_41934979/article/details/139711262<?xmlversion="1.0"encoding="UTF-8"?><configuratio......
  • 20222308 2024-2025-2《网络与系统攻防技术》实验二实验报告
    1.实验内容1.1实践目标使用netcat获取主机操作Shell,cron启动某项任务(任务自定)PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程使用socat获取主机操作Shell,任务计划启动使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机......
  • Vue最受欢迎的七大跨端框架,你都用过哪几个?
    随着移动互联网的快速发展,开发者们不仅需要为Web开发,还需要兼顾iOS、Android、小程序等多个平台。这让“跨端开发”成为了炙手可热的话题。而基于Vue的跨端框架凭借其优异的性能和灵活的开发体验,受到了大量开发者的青睐。在众多选择中,有七大框架尤其受到关注:Ionic、uni-app、Taro......
  • JAVA开源项目 基于Vue和SpringBoot母婴商城系统
    本文项目编号T030,文末自助获取源码\color{red}{T030,文末自助获取源码}......
  • java+vue计算机毕设反诈骗推广系统【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,网络诈骗案件层出不穷,严重危害了人民群众的财产安全与合法权益。诈骗手段不断翻新,从传统的电话诈骗、短信诈骗,到近年来兴起的......