使用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性能优化技巧分析
Feb 20 Javascript
深入分析javascript中console命令
Aug 14 Javascript
js实现带缓动动画的导航栏效果
Jan 16 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
Jul 12 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
Nov 09 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
Feb 13 jQuery
JS关于刷新页面的相关总结
May 09 Javascript
浅谈Webpack 是如何加载模块的
May 24 Javascript
解决vue cli使用typescript后打包巨慢的问题
Sep 30 Javascript
JS操作JSON常用方法(10w阅读)
Dec 06 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
phpmyadmin操作流程
2006/10/09 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
Python中除法使用的注意事项
2014/08/21 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
Python中turtle作图示例
2017/11/15 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
kali中python版本的切换方法
2019/07/11 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
Python2与Python3的区别点整理
2019/12/12 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
实例代码讲解Python 线程池
2020/08/24 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
网络编辑岗位职责范本
2014/02/10 职场文书
《蜗牛》教学反思
2014/02/18 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
大专生自荐书范文
2014/06/22 职场文书
房屋维修协议书范本
2014/09/25 职场文书
北京青年观后感
2015/06/15 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
Nginx的基本概念和原理
2022/03/21 Servers
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫