两个vue对象共享一个data,模拟Vuex

案例

多个Vue组件共享相同的数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/vue.js"></script>
</head>
<body>
    <div id="app">
        <div>{{username}}</div>
        <div>
            <button @click='changeName'>改变琦琦</button>
        </div>
    </div>

    <div id="app2">
        <div>{{username}}</div>
        <div>
            <button @click='resetNameAction'>reset琦琦</button>
        </div>
    </div>
</body>
<script>
// 定义了一个公共的数据
var store = {
    username: 'qiqi',
    // 改变数据的内容
    resetName: function () {
        this.username = 'reset Name';
    }
}

var app = new Vue({
    el: '#app',
    data: store,
    methods: {
        // 直接改变数据的值
        changeName: function () {
            this.username = 'zhangsan'+ new Date().getTime();
        }
    },
})    

var app2 = new Vue({
    el: '#app2',
    data: store,
    methods: {
        // 通过store对象改变 store的值
        resetNameAction: function () {
            store.resetName();
        }
    },
})    
</script>
</html>
  1. app和app2共用相同的数据store
  2. app和app2任何一个改变了数据,其他的组件都会受到影响
  3. store本身也可以改变数据,当他的数据改变之后,也会影响到对应的Vue对象

上面就是Flux的思想,Vuex就是对这种思想的实现

Vue组件数据不共享

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/vue.js"></script>
</head>
<body>
    <div id="app">
        <son-component></son-component>
        <hr/>
        <son-component></son-component>
    </div>

    <div id="app2">
        <son-component></son-component>
    </div>
</body>
<script>
// 定义全局组件,被各个Vue 对象所拥有
Vue.component('son-component',{
    template: `
        <div>
            <div>
                {{username}}
            </div>    
            <div>
                <button @click="changeName">change naoteng</button>
            </div>         
        </div>
    `,
    // 如果存在多个相同的组件,每个组件都是返回一个新的相同的JSON对象,组件彼此互不干扰
    data:  function () {
        return {
            username: 'naoteng'
        }
    },
    methods: {
        changeName: function () {
            this.username = 'zhangsan'+ new Date().getTime();
        }
    }
})  


var app = new Vue({
    el: '#app',
})    

var app2 = new Vue({
    el: '#app2',
})    
</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值