Javascript 如何在Vue中将数据从组件传递到实例
我正在尝试从组件获取数据,并将其传递给根Vue实例中的变量 我的Vue实例:Javascript 如何在Vue中将数据从组件传递到实例,javascript,vue.js,Javascript,Vue.js,我正在尝试从组件获取数据,并将其传递给根Vue实例中的变量 我的Vue实例: new Vue({ el: '#root', data: { searchResultObject: '' }, methods: { //.... } }); 我的全球部分: Vue.component('user-container-component', { props: { prop: null },
new Vue({
el: '#root',
data: {
searchResultObject: ''
},
methods: {
//....
}
});
我的全球部分:
Vue.component('user-container-component', {
props: {
prop: null
},
template: '#user-container-template',
data: function () {
return {
searchResultObject: ''
}
},
methods: {
dbSearch_method: function () {
var self = this;
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
self.searchResultObject = response;
},
error: function () {
alert('error');
}
});
}
}
})
在我的UI中按下一个按钮触发dbSearch\u方法
,该部分工作。我想知道在我的实例中如何将数据获取到searchResultObject
,而不是组件
HTML:
您可以将该值作为事件发出,供父级侦听
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
self.searchResultObject = response;
this.$emit('onSearchResult', response)
},
error: function () {
alert('error');
}
});
然后在父级中,您可以通过设置侦听器来获取它
<user-container-component v-on:onSearchResult="parentListener"/>
您可以将该值作为事件发出,供家长收听
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
self.searchResultObject = response;
this.$emit('onSearchResult', response)
},
error: function () {
alert('error');
}
});
然后在父级中,您可以通过设置侦听器来获取它
<user-container-component v-on:onSearchResult="parentListener"/>
正如您所说,组件
用户容器组件
位于id为#root的元素中,假设您的html如下所示:
<div id="root">
<user-container-component></user-container-component>
</div>
Vue.component('user-container-component', {
props: {
prop: null
},
template: '#user-container-template',
data: function () {
return {
searchResultObject: ''
}
},
methods: {
dbSearch_method: function () {
var self = this;
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
this.$emit('search-results-fetched', response);
},
error: function () {
alert('error');
}
});
}
}
})
<div id="root">
<user-container-component @search-results-fetched="addSearchResults($event)"></user-container-component>
</div>
在html设置中,用户容器组件上的事件侦听器如下所示:
<div id="root">
<user-container-component></user-container-component>
</div>
Vue.component('user-container-component', {
props: {
prop: null
},
template: '#user-container-template',
data: function () {
return {
searchResultObject: ''
}
},
methods: {
dbSearch_method: function () {
var self = this;
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
this.$emit('search-results-fetched', response);
},
error: function () {
alert('error');
}
});
}
}
})
<div id="root">
<user-container-component @search-results-fetched="addSearchResults($event)"></user-container-component>
</div>
正如您所说,组件用户容器组件
位于id为#root
的元素中,假设您的html如下所示:
<div id="root">
<user-container-component></user-container-component>
</div>
Vue.component('user-container-component', {
props: {
prop: null
},
template: '#user-container-template',
data: function () {
return {
searchResultObject: ''
}
},
methods: {
dbSearch_method: function () {
var self = this;
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
this.$emit('search-results-fetched', response);
},
error: function () {
alert('error');
}
});
}
}
})
<div id="root">
<user-container-component @search-results-fetched="addSearchResults($event)"></user-container-component>
</div>
在html设置中,用户容器组件上的事件侦听器如下所示:
<div id="root">
<user-container-component></user-container-component>
</div>
Vue.component('user-container-component', {
props: {
prop: null
},
template: '#user-container-template',
data: function () {
return {
searchResultObject: ''
}
},
methods: {
dbSearch_method: function () {
var self = this;
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
this.$emit('search-results-fetched', response);
},
error: function () {
alert('error');
}
});
}
}
})
<div id="root">
<user-container-component @search-results-fetched="addSearchResults($event)"></user-container-component>
</div>
对于大型项目,可以使用vuex来管理数据
或者,您可以使用eventbus解决同一级别的组件数据传输问题
对于您的情况,我认为应该使用$emit
dbSearch_method: function () {
var self = this;
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
self.searchResultObject = response;
this.$emit('customEvent', response);
},
error: function () {
alert('error');
}
});
}
在您的根vue实例中,您可以使用$on来监听事件触发。对于大型项目,您可以使用vuex来管理数据
或者,您可以使用eventbus解决同一级别的组件数据传输问题
对于您的情况,我认为应该使用$emit
dbSearch_method: function () {
var self = this;
$.ajax({
url: 'Home/LocalSearch',
type: 'GET',
success: function (response) {
self.searchResultObject = response;
this.$emit('customEvent', response);
},
error: function () {
alert('error');
}
});
}
在您的根vue实例中,您可以使用$on来监听事件触发。用户容器组件是否是id为#root
的元素的直接子元素?您的意思是它是否在
中?然后是的,但它不在我的脚本的根实例中。它是一个全球性的组成部分。至少我认为它是
的子元素,是从另一个组件(在
内部)调用的组件,如果这有意义的话。用户容器组件是id#root
元素的直接子元素吗?你的意思是它是否在
内部?然后是的,但它不在我的脚本的根实例中。它是一个全球性的组成部分。至少我认为它算是
的子组件,它是从另一个组件调用的组件(在
中),如果这有意义的话。太棒了,这看起来像我需要的,尽快在大约一个小时后回复你。我刚刚添加了一个编辑。我尝试添加您显示的所有内容,但从未调用方法addSearchResult
。我添加了我能想到的所有相关代码。请注意,
模板不在根目录div
中,但由于它们是从该div
中调用的,所以这不重要?@Green\que应该可以工作。。你能在JSFIDLE ao中复制它吗?它可以很容易地调试,我试试看!)在编写JS fiddle时,我意识到,我实际上在根组件中有一个中间步骤。因此,我在该组件中添加了另一个事件,该事件将其发送到实际的Vue实例中,并且可以正常工作:DAwesome这看起来像我需要的,请在大约一小时后尽快与您联系。我刚刚添加了一个编辑。我尝试添加您显示的所有内容,但从未调用方法addSearchResult
。我添加了我能想到的所有相关代码。请注意,
模板不在根目录div
中,但由于它们是从该div
中调用的,所以这不重要?@Green\que应该可以工作。。你能在JSFIDLE ao中复制它吗?它可以很容易地调试,我试试看!)在编写JS fiddle时,我意识到,我实际上在根组件中有一个中间步骤。因此,我在该组件中添加了另一个事件,将其发送到实际的Vue实例,它可以工作:D