如何使用方法扩展 vuejs?
How to extend a vuejs with a method?
我目前正在思考如何扩展 vuejs 实例。具体来说,我想分离一个实例,以便我可以重用实例的基础(元素和数据)。我目前有不同的 (laravel/blade) 视图来添加和编辑项目(域),我想在这两者之间共享一个 vuejs 实例,但我不想在两个中使用相同的代码(基础)地点。
基本上,我要搜索的是以下内容:
<script type="text/javascript">
var vue = new Vue({
el: '#domain',
data: {
form: {
'name' : '',
'git_repo' : '',
'auto_deploy' : '',
'create_db' : ''
},
ajaxResponse : ''
}
});
</script>
<script type="text/javascript">
Vue.extend('domain_methods', {
methods: {
postDomain: function () {
this.$http.post('{{ route('domain.store') }}', function (data, status, request) {
this.$set('ajaxResponse', data);
}, {
data: this.form
} ).error(function (data, status, request) {
this.$set('ajaxResponse', data);
});
}
}
});
</script>
但这显然行不通。我只想在#domain 元素中使用 postDomain() 方法,而无需在实例的初始创建中编写该方法。
提前致谢!
小心——您将 .extend()
的用法与 .component()
的用法混为一谈。他们做非常不同的事情。文档的这一部分包含有关差异的更多信息:
http://vuejs.org/guide/components.html
在这种特殊情况下,只需通过 .extend()
声明您的顶级 Vue class,然后通过将其用作构造函数来实例化它的子class。这为您提供了类似继承的行为。
因此,例如:
<script type="text/javascript">
var MainVue = Vue.extend({
data: function () {
return {
form: {
'name' : '',
'git_repo' : '',
'auto_deploy' : '',
'create_db' : ''
},
ajaxResponse : ''
};
}
});
</script>
<script type="text/javascript">
var secondary_vue = new MainVue({
el: '#domain',
methods: {
postDomain: function () {
this.$http.post('{{ route('domain.store') }}', function (data, status, request) {
this.$set('ajaxResponse', data);
}, {
data: this.form
} ).error(function (data, status, request) {
this.$set('ajaxResponse', data);
});
}
}
});
</script>
我目前正在思考如何扩展 vuejs 实例。具体来说,我想分离一个实例,以便我可以重用实例的基础(元素和数据)。我目前有不同的 (laravel/blade) 视图来添加和编辑项目(域),我想在这两者之间共享一个 vuejs 实例,但我不想在两个中使用相同的代码(基础)地点。
基本上,我要搜索的是以下内容:
<script type="text/javascript">
var vue = new Vue({
el: '#domain',
data: {
form: {
'name' : '',
'git_repo' : '',
'auto_deploy' : '',
'create_db' : ''
},
ajaxResponse : ''
}
});
</script>
<script type="text/javascript">
Vue.extend('domain_methods', {
methods: {
postDomain: function () {
this.$http.post('{{ route('domain.store') }}', function (data, status, request) {
this.$set('ajaxResponse', data);
}, {
data: this.form
} ).error(function (data, status, request) {
this.$set('ajaxResponse', data);
});
}
}
});
</script>
但这显然行不通。我只想在#domain 元素中使用 postDomain() 方法,而无需在实例的初始创建中编写该方法。
提前致谢!
小心——您将 .extend()
的用法与 .component()
的用法混为一谈。他们做非常不同的事情。文档的这一部分包含有关差异的更多信息:
http://vuejs.org/guide/components.html
在这种特殊情况下,只需通过 .extend()
声明您的顶级 Vue class,然后通过将其用作构造函数来实例化它的子class。这为您提供了类似继承的行为。
因此,例如:
<script type="text/javascript">
var MainVue = Vue.extend({
data: function () {
return {
form: {
'name' : '',
'git_repo' : '',
'auto_deploy' : '',
'create_db' : ''
},
ajaxResponse : ''
};
}
});
</script>
<script type="text/javascript">
var secondary_vue = new MainVue({
el: '#domain',
methods: {
postDomain: function () {
this.$http.post('{{ route('domain.store') }}', function (data, status, request) {
this.$set('ajaxResponse', data);
}, {
data: this.form
} ).error(function (data, status, request) {
this.$set('ajaxResponse', data);
});
}
}
});
</script>