使用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二级导航内容均分的原理及实现
Aug 13 Javascript
jQuery验证元素是否为空的两种常用方法
Mar 17 Javascript
jQuery实现的分子运动小球碰撞效果
Jan 27 Javascript
JavaScript核心语法总结(推荐)
Jun 02 Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 Javascript
Jquery根据浏览器窗口改变调整大小的方法
Feb 07 Javascript
JS变量及其作用域
Mar 29 Javascript
Angular中自定义Debounce Click指令防止重复点击
Jul 26 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 Javascript
vue props传值失败 输出undefined的解决方法
Sep 11 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
JavaScript流程控制(循环)
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
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
php正则修正符用法实例详解
2016/12/29 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
node.js实现爬虫教程
2020/08/25 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python写的一个简单监控系统
2015/06/19 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
python的faker库用法
2019/11/28 Python
python批量处理txt文件的实例代码
2020/01/13 Python
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
高中物理教学反思
2014/02/08 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
体育活动总结
2015/02/04 职场文书
财务稽核岗位职责
2015/04/13 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书