vue (8)

vue8

文章目录

  • 1. 浏览器本地存储
    • 1.1 localStorage
    • 1.2 sessionStorage
    • 1.3 总结
  • 2. 修改 TodoList 案例
  • 3. 绑定自定义事件
    • 3.1 绑定
    • 3.2 解绑
    • 3.3 两个注意点
    • 3.4 总结
    • 3.5 修改 TodoList 案例
  • 4. 全局事件总线
    • 4.1 总结
    • 4.2 修改 TodoList 案例

1. 浏览器本地存储

1.1 localStorage


图一 :


图二 : 往浏览器添加一个数据


图三 : 从浏览器存储中读取一个数据

vue (8)_第1张图片


图四 : 删除一个浏览器存储的数据

vue (8)_第2张图片


下面来看一个小细节 : 当我们通过 getItem方法 读取一个 没有被浏览器存储的数据时,会返回一个 null

vue (8)_第3张图片


附上代码 :

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>localStoragetitle>
head>

<body>

    <h2>localStorageh2>
    <button onclick="saveData()">点我保存一个数据button>
    <button onclick="readData()">点我读取一个数据button>
    <button onclick="deleteData()">点我删除一个数据button>
    <button onclick="deleteAllData()">清空button>


    <script type="text/javascript">

        let person = {
            name: "张三",
            age: 18
        }

        function saveData() {

            window.localStorage.setItem("msg", "hello!")
            window.localStorage.setItem("person", JSON.stringify(person))
        }

        function readData() {
            console.log(window.localStorage.getItem("msg"))
            // 这里 window 可以省略,直接写成 localStorage
            let result = localStorage.getItem("person");
            console.log(JSON.parse(result));

        }

        function deleteData(){
            localStorage.removeItem("msg")

        }

        function deleteAllData(){
            localStorage.clear();
        }


    script>
body>

html>


到此关于 localStorage 的几个 API 就看完了, 下面来看看 另外一个 sessionStorage


sessionStorage 中 添加一个数据到浏览器中 , 读取一个数据 等 都与 localStorage 里面是一样的 (里面的方法是一样的).

1.2 sessionStorage


这里直接 将 上面 调用 localStorage 里的方法 ,改为调用 sessionStorage 方法即可.

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>sessionStoragetitle>
head>

<body>

    <h2>sessionStorageh2>
    <button onclick="saveData()">点我保存一个数据button>
    <button onclick="readData()">点我读取一个数据button>
    <button onclick="deleteData()">点我删除一个数据button>
    <button onclick="deleteAllData()">清空button>


    <script type="text/javascript">

        let person = {
            name: "张三",
            age: 18
        }

        function saveData() {

            window.sessionStorage.setItem("msg", "hello!")
            window.sessionStorage.setItem("person", JSON.stringify(person))
        }

        function readData() {
            console.log(window.sessionStorage.getItem("msg"))
            // 这里 window 可以省略,直接写成 sessionStorage
            let result = sessionStorage.getItem("person");
            console.log(JSON.parse(result));

        }

        function deleteData(){
            sessionStorage.removeItem("msg")

        }

        function deleteAllData(){
            sessionStorage.clear();
        }


    script>
body>

html>


图示 :

vue (8)_第4张图片

关于 使用 sessionStorage 保存数据 会在关闭浏览器后自动清空.

1.3 总结

关于 localStorage 和 sessionStorage 统称未 webStorage.

关于 webStorage 有 :

  1. 存储内容大小一般支持 5MB 左右 (不同浏览器可能还不同)

  2. 浏览器端通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制

  3. 相关 API :

    a. xxxxStorage.setItem('key','value'); 该方法接收一个键和一个值作为参数 , 会把键值对添加到存储中 , 如果键名存在,则更新对应的值 (新的value 值 将 旧的 value 值覆盖掉)
    
    b.xxxxStorage.getItem('pserson') 该方法接受一个键名作为参数 , 返回键名对应的值
    
    c. xxxxStorage.removeItem('key') 该方法接接受一个键名作为参数 , 并把该键名从存储中删除
    
    d. xxxxStorage.clear() 该方法会清空存储中所有数据
    
  4. 备注 :

    a. SessionStorage 存储的内容会随着浏览器窗口关闭而消失
    
    b. LocalStorage 存储的内容,需要手动清空才会消失
    
    c. xxxxStorage.getItem(xxx) 如果 xxx 对应的 value 值获取不到 , 那么 getItem 的返回值 是 null
    
    d. JSON.parse(null) 的结果依然是 null.
    

2. 修改 TodoList 案例


上面我们学习了 浏览器本地存储 ,下面我们就来修改一下之前完成的 TodoList 案例 .


之前我们的 TodoList 案例 并没有存储功能 ,下面将 用户 输入的任务存储到 浏览器中 (这里最好的做法是存入到数据库中.)


图一 :


图二 :


图三 :

TodoList 案例 完整代码

3. 绑定自定义事件


在学习 绑定自定义事件 前我们先来准备一下学习的环境 ,

vue (8)_第5张图片


创建两个 组件 School 和 Student 组件 .


School组件 :

<template>
  <div class="school">
    <h2>学校名称: {{ name }}h2>
  div>
template>

<script>
export default {
  name: "School",
  data() {
    return {
      name: "小葵花幼儿园",
      address: "翻斗花园",
    };
  },
};
script>

<style scoped>
.school {
  background-color: skyblue;
  padding: 5px;
}
style>


Student 组件 :

<template>
  <div class="student">
    <h2>学生姓名 : {{ name }}h2>
    <h2>学生性别 : {{ sex }}h2>
  div>
template>

<script>
export default {
  name: "Student",
  data() {
    return {
      name: "张三",
      sex: "男",
    };
  },
};
script>

<style scoped>
.student {
  background-color: pink;
  padding: 5px;
  margin-top: 30px;
}
style>


App 组件 :

<template>
  <div class="app">
    <h1>{{ msg }}h1>
    <School :getSchoolName="getSchoolName" />
    <Student />
  div>
template>

<script>
import Student from "./components/Student.vue";
import School from "./components/School.vue";

export default {
  name: "App",
  components: {
    School,
    Student,
  },
  data() {
    return {
      msg: "快快乐乐学习Vue",
    };
  },
  methods: {
    getSchoolName(name) {
      console.log("App 收到了学校名 : " + name);
    },
  },
};
script>

<style>
.app {
  background-color: gray;
  padding: 5px;
}
style>


完成上面环境搭建 ,会得到以下的页面效果 :

vue (8)_第6张图片


下面就来 学习给组件绑定自定义事件 :

3.1 绑定


图一 :


图二 :


图三 :

vue (8)_第7张图片


图四 :


到此我们已经学习完了 绑定自定义事件 ,下面我们来学习一下给绑定了自定义事件的组件进行解绑操作.

3.2 解绑


图一 :


图二 :

vue (8)_第8张图片


图三 :


图四 :

vue (8)_第9张图片

3.3 两个注意点


注意点一 :


图一 :


图二 :


图三 :


注意点二 :


图一 :

vue (8)_第10张图片


图二 :

vue (8)_第11张图片

到此两个注意点看完 , 下面就来总结一波

3.4 总结


组件的自定义事件

  1. 一种组件间通信的方式 使用 : 子组件 ===> 父组件

  2. 使用场景 : A 是父组件 , B 是 子组件 , B 想给 A 传数据 , 那么 要在 A 中 给 B 绑定自定义事件 (事件的回调在 A 中)

  3. 绑定自定义事件 :

    a. 第一种方式 , 在父组件中 :

    b. 第二种方式 , 在父组件中

    <Deom ref = "demo"/>
    ...
    mounted(){
    	this.$refs.demo.$on('wahh',this.test)
    }
    

    c. 若想让自定义事件只能触发一次 , 可以使用 once 修饰符 ,或 $once 方法 (这个是在 ref 方式中使用).

  4. 触发自定义事件 : this.$emit('wahh',传递的数据)

  5. 解绑自定义事件 : this.$off('wahh')

  6. 组件上也可以绑定原生DOM事件 ,需要使用 native 修饰符

  7. 注意 : 通过 this.$refs.xxx.$on('wahh',回调) 绑定自定义事件时,回调 要么配置在 methods 中 , 要么使用箭头函数,否则this 指向会出问题 !

3.5 修改 TodoList 案例


上面我们已经学习了 自定义事件, 下面来练习一下 ,把之前我们写的 TodoList 案例 用上自定义事件来传递数据.


图一 :

vue (8)_第12张图片


图二 :


图三 :

TodoList 自定义事件完整代码

4. 全局事件总线


全局事件总线 可以实现 任意组件间通信


这里我们先来看看原理图 :


图一 :

vue (8)_第13张图片


图二 :


原理图看完,下面通过代码来学习一下事件总线.


图一 :

vue (8)_第14张图片


图二 :

vue (8)_第15张图片


图三 :


图四 :


图五 :


图六 :

vue (8)_第16张图片

注意 : 绑定的事件别忘记 解绑

vue (8)_第17张图片

4.1 总结


全局事件总线 (GlobalEventBus)

  1. 一种组件间通信的方式 , 使用于 任何组件间通信

  2. 安装全局事件总线 :

    new Vue({
    	.....
    	beforeCreate(){
    	// 安装全局事件总线 , $bus 就是当前应用的 vm
    		Vue.prototype.$bus = this
    	}
    })
    
  3. 使用事件总线 :

    a.接收数据 : A 组件想要接收数据 , 则在 A 组件中 给 $bus 绑定自定义事件 , 事件的 回调留在 A 组件自身

    methods(){
    	demo(data){.....}
    }
    .....
    mounted(){
    	this.$bus.$on('xxxx',this.demo)
    }
    

    b. 提供数据 : this.$bus.$emit('xxxx',数据)

  4. 最好在 beforeDestroy 钩子中 , 用 $off 去解绑 当前组件所用到的 事件

4.2 修改 TodoList 案例


上面我们已经了解完 全局事件总线,下面通过 事件总线来 修改一下我们的 TodoList 代码案例.


图一 :

vue (8)_第18张图片


图二 :

你可能感兴趣的:(vue,vue.js,javascript,前端)