使用Vue.observable()进行状态管理的实例代码详解


Posted in Javascript onMay 26, 2019

随着组件的细化,就会遇到多组件状态共享的情况, Vuex当然可以解决这类问题,不过就像 Vuex官方文档所说的,如果应用不够大,为避免代码繁琐冗余,最好不要使用它,今天我们介绍的是 vue.js 2.6 新增加的 Observable API ,通过使用这个 api 我们可以应对一些简单的跨组件数据状态共享的情况。

先看下官网描述,如下图

 使用Vue.observable()进行状态管理的实例代码详解

observable()方法,用于设置监控属性,这样就可以监控viewModule中的属性值的变化,从而就可以动态的改变某个元素中的值,监控属性的类型不变量而是一个函数,通过返回一个函数给viewModule对象中的属性,从而来监控该属性。

说那么多,我们在实际例子中尝试玩一下:

搭建个简单脚手架,在项目src目录下建立store.js,在组件里使用提供的 store和 mutation方法,同理其它组件也可以这样使用,从而实现多个组件共享数据状态。

首先创建一个 store.js,包含一个 store和一个 mutations,分别用来指向数据和处理方法。

//store.js
import Vue from 'vue';

export let store =Vue.observable({count:0,name:'李四'});
export let mutations={
  setCount(count){
    store.count=count;
  },
  changeName(name){
    store.name=name;
  }
}

然后在组件Home.vue中引用,在组件里使用数据和方法:

//Home.vue
 <template> 
    <div class="container"> 
      <home-header></home-header> 
      <button @click="setCount(count+1)">+1</button>
      <button @click="setCount(count-1)">-1</button>
       <div>store中count:{{count}}</div>
      <button @click="changeName(name1)">父页面修改name</button>
      <div>store中name:{{name}}</div>
      <router-link to="/detail" ><h5>跳转到详情页</h5>  </router-link>
    </div> 
  </template> 
  <script> 
    import HomeHeader from '../components/HomeHeader'  
    import {store,mutations} from '@/store'
    export default { 
      data () { 
        return { 
          name1:'主页的name'
        } 
      }, 
      components: { 
        HomeHeader 
      }, 
      computed:{
        count(){
          return store.count
        },
        name(){
          return store.name
        }
      },
      methods:{
        setCount:mutations.setCount,
        changeName:mutations.changeName  
      }
    } 
  </script>

 使用Vue.observable()进行状态管理的实例代码详解

再定义一个子页面观察数据:

//Detail.vue
<template> 
  <div class="detail"> 
    <detail-header></detail-header> 
    <button @click="changeName(name2)">子页面修改name</button>
    <p>store中name:{{name}}</p>
  </div> 
</template> 
<script> 
  import DetailHeader from '../components/DetailHeader' 
  import {store,mutations} from '@/store'
  export default { 
    components: { 
      DetailHeader 
    } ,
    data(){
      return {
        name2:'子页的name'
      }
    },
    computed:{
      name(){
        return store.name
      }
    },
    methods:{
      changeName:mutations.changeName
    }
  } 
</script>

子页面显示如图:

使用Vue.observable()进行状态管理的实例代码详解 

我们简单点击下按钮,改变下store中的数据,效果如下:

使用Vue.observable()进行状态管理的实例代码详解 

最后补充一点,就是如果当前项目vue版本低于2.6,要使用Vue.observable(),就必须要升级,升级 vue 和 vue-template-compiler,两者的版本需要同步,如果不同步项目会报错。

//升级vue版本
npm update vue -S 或者 yarn add vue -S
npm update vue-template-compiler -D 或者 yarn add vue-template-compiler -D

总结

以上所述是小编给大家介绍的使用Vue.observable()进行状态管理的实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Dojo 学习笔记入门篇 First Dojo Example
Nov 15 Javascript
jquery中使用ajax获取远程页面信息
Nov 13 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
Oct 20 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
js获取当前路径的简单示例代码
Jan 08 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
Nov 20 Javascript
简单谈谈gulp-changed插件
Feb 21 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
React组件内事件传参实现tab切换的示例代码
Jul 04 Javascript
vue实例中data使用return包裹的方法
Aug 27 Javascript
javascript实现简单打字游戏
Oct 29 Javascript
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
微信小程序 swiper 组件遇到的问题及解决方法
May 26 #Javascript
vue项目打包后怎样优雅的解决跨域
May 26 #Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 #Javascript
vue实现的请求服务器端API接口示例
May 25 #Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 #Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
May 24 #Javascript
了解JavaScript中的选择器
May 24 #Javascript
You might like
PHP实现文件安全下载
2006/10/09 PHP
PHP 验证码的实现代码
2011/07/17 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php获取linux命令结果的实例
2017/03/13 PHP
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python复制与引用用法分析
2015/04/08 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
python读写csv文件实例代码
2019/07/05 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
仓库理货员岗位职责
2013/12/18 职场文书
《自然之道》教学反思
2014/02/11 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
诚信承诺书
2015/01/19 职场文书
2015教师年度考核评语
2015/03/25 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
python代码实现扫码关注公众号登录的实战
2021/11/01 Python