如何在当前 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.js 或 page2.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');
}
}
});
我是 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.js 或 page2.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');
}
}
});