如何在当前 Vue 实例上添加方法或数据?

How to add methods or data on current Vue instance?

我是 Vue.js 的新手,正在弄乱它。有没有办法创建可重用的方法和数据?

这是我想要实现的非常简单的代码:

page1.html

<div id="app">
  <button type="button" v-on="click: foo()">Foo</button> 
  <button type="button" v-on="click: bar()">Bar</button>
</div>

<script src="reusable.js"></script> 
<script src="page1.js"></script>  <-- Custom script -->

page2.html

<div id="app">
  <button type="button" v-on="click: foo()">Foo</button> 
  <button type="button" v-on="click: baz()">Baz</button>
</div>

<script src="reusable.js"></script> 
<script src="page2.js"></script>  <-- Custom script -->

reusable.js

var vm = new Vue({
  el: '#app',
  data: {
    name: 'John'
  },
  methods: {
    foo: function(){
      console.log('foo');
    }
  }
});

现在我想在我的 reusable.js 的 VM 上访问数据或添加方法,这样我就可以在我的 上访问它page1.jspage2.js。我不知道该怎么做,但我想实现这样的目标:

page1.js

// adds a new method on my reusable.js's vm
vm.extend({
  methods: {
    bar: function(){
      // triggers when I click the bar button
      console.log('bar'); 
      console.log(this.name); // John
    }
  }
});

page2.js

// adds a new method on my reusable.js's vm
vm.extend({
  methods: {
    baz: function(){
      // triggers when I click the baz button
      console.log('baz');
      console.log(this.name); // John
    }
  }
});

我知道 vm.extend 是错误的(我只是让你们了解我正在努力实现的目标)。

你有什么建议吗?

也许你可以使用 mixins?差不多像这样:

var mix = {
    methods : {
        bar : function() {
            console.log('bar')
        }
    }
};

var demo = new Vue({
    el: '#demo',
    mixins : [mix],
    methods : {
        foo: function() {
            console.log('foo')
        }
    }
});

演示:http://jsfiddle.net/dewey92/yMv7y/965/

来源:http://vuejs.org/guide/extending.html

所以在你的情况下:

Page1.html:

<div id="app">
    <button type="button" v-on="click: foo()">Foo</button> 
    <button type="button" v-on="click: bar()">Bar</button>
</div>

<script src="page1.js"></script>  <-- Custom script (or page2.js) -->
<script src="reusable.js"></script> 

page1.js:

var mix = {
    methods : {
        bar : function() {
            console.log('bar')
        }
    }
};

page2.js:

var mix = {
    methods : {
        baz : function() {
            console.log('baz')
        }
    }
};

reusable.js:

var vm = new Vue({
        el: '#app',
        mixins: [mix],
        data: {
            name: 'John'
        }
        methods: {
            foo: function(){
                console.log('foo');
            }
        }
    });