繁体   English   中英

将数据从一个Vue.js实例输出到另一个实例

[英]Output data from one Vue.js instance into another

我有一个很大的页面,有很多东西在继续。 所以我有两个页面的2个Vue实例。 如何将数据从一个Vue实例绑定到另一个?

这个例子应该显示我想要做的事情。 (这不是那样的)

<div class="app1">...</div>
...
<div class="app2">{{app1.$data.msg}}</div>

var app1 = new Vue({
    el: '.app1',
    data: {msg: "test"}
});

var app2 = new Vue({
    el: '.app2'
});

事先,我知道这不是你问的问题,但我不知道为什么你需要两个Vue实例。 为什么不将Vue绑定到body并将Vue实例视为组件。 你可能很难做你想做的事情,因为它不是故意的。 也许是,我不知道。 我已经将Vue设置在身体上并且我没有看到性能受到影响。 这是一个JSBin

HTML

<div class="container">
    <div id="app1">
        <h1>{{ msg }}</h1>
        <input type="text" v-model="msg" class="form-control"/>

    </div>
    <div id="app2">
        <h1>{{ msg }}</h1>
        <input type="text" v-model="msg" class="form-control"/>
    </div>
</div>

JavaScript的

var VueComponent1 = Vue.extend({
    template: '#app1',
    data: function(){
        return {
            msg: ""
        }
    }
});

var VueComponent2 = Vue.extend({
    template: '#app2',
    data: function(){
        return {
            msg: ""
        }
    }
});

var app1 = Vue.component('app1', VueComponent1);
var app2 = Vue.component('app2', VueComponent2);
var app = new Vue({
    el: 'body',
    data: { msg: 'Everybody loves Vue.' }
});

如果您正在寻找一种更好的方法来分隔您的代码,您可能希望使用Browserify示例查看此Vue

Laracasts有一个关于Vue 的免费系列 ,它也提供了相当丰富的信息。

我仍然在寻找最好的解决方案。 以下感觉有点hacky但它​​的工作原理。

您可以使用watch选项来侦听表达式的更改并触发函数。 在此功能中,您可以更新另一个Vue实例的所需数据。 在你的例子中我们会这样做:

var app1 = new Vue({
  el: '.app1',
  data: {msg: 'test'},
  watch: {
    'msg': function() { app2.msg = this.msg; }
  }
});

var app2 = new Vue({
  el: '.app2',
  data: { msg: app1.$data.msg },
  watch: {
    'msg': function() { app1.msg = this.msg; }
  }
});

你可以在这个jsbin中看到这个。

而且,我想知道你是否甚至需要这样做。 如果这是一个真实的情况,可以有更好的方法来处理这个避免这种hacky解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM