使用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 相关文章推荐
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
JQuery跨Iframe选择实现代码
Aug 19 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
js判断60秒以及倒计时示例代码
Jan 24 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
JavaScript导航脚本判断当前导航
Jul 12 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
Aug 12 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
深入解析ES6中的promise
Nov 08 Javascript
js+canvas实现简单扫雷小游戏
Jan 22 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
May 20 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常用技巧汇总
2016/03/04 PHP
YII框架http缓存操作示例
2019/04/29 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
Angular2库初探
2017/03/01 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
详解Python多线程
2016/11/14 Python
python装饰器原理与用法深入详解
2019/12/19 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
大学生毕业求职的自我评价
2013/09/29 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
法学专业自我鉴定
2014/02/05 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
十八大标语口号
2014/10/09 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python