使用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 相关文章推荐
基于jquery的仿百度搜索框效果代码
Apr 11 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
Nov 12 Javascript
jquery实现文本框数量加减功能的例子分享
May 10 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
Aug 10 Javascript
jQuery的ready方法详解
Nov 27 Javascript
JavaScript检测并限制复选框选中个数的方法
Aug 12 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
基于javascript实现的快速排序
Dec 02 Javascript
webpack配置打包后图片路径出错的解决
Apr 26 Javascript
原生js canvas实现鼠标跟随效果
Aug 02 Javascript
微信小程序 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 验证码制作(网树注释思想)
2009/07/20 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
php中引用符号(&amp;)的使用详解
2013/11/13 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
Python备份Mysql脚本
2008/08/11 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Python中的取模运算方法
2018/11/10 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
phpquery中文手册
2021/03/18 PHP
德国家具在线:Fashion For Home
2017/03/11 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
优秀教师先进事迹
2014/01/22 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
原告代理词范文
2015/05/25 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript