gpt4 book ai didi

javascript - 将数据传递给 vue.js 中的组件

转载 作者:IT王子 更新时间:2023-10-29 02:50:19 31 4
gpt4 key购买 nike

我很难理解如何在 vue.js 中的组件之间传递数据。我已经多次通读文档并查看了许多与 vue 相关的问题和教程,但我仍然没有得到它。

为了解决这个问题,我希望得到帮助来完成一个非常简单的示例

  1. 在一个组件中显示用户列表(完成)
  2. 单击链接(完成)时将用户数据发送到新组件 - 请参阅底部的更新。
  3. 编辑用户数据并将其发送回原始组件(还没到这一步)

这是一个 fiddle ,在第二步失败了:https://jsfiddle.net/retrogradeMT/d1a8hps0/

我知道我需要使用 props 将数据传递给新组件,但我不确定如何在功能上做到这一点。如何将数据绑定(bind)到新组件?

HTML:

    <div id="page-content">
<router-view></router-view>
</div>

<template id="userBlock" >
<ul>
<li v-for="user in users">{{user.name}} - <a v-link="{ path: '/new' }"> Show new component</a>
</li>
</ul>
</template>

<template id="newtemp" :name ="{{user.name}}">
<form>
<label>Name: </label><input v-model="name">
<input type="submit" value="Submit">
</form>
</template>

主要组件的js:

Vue.component('app-page', {
template: '#userBlock',

data: function() {
return{

users: []
}
},

ready: function () {
this.fetchUsers();
},

methods: {
fetchUsers: function(){
var users = [
{
id: 1,
name: 'tom'
},
{
id: 2,
name: 'brian'
},
{
id: 3,
name: 'sam'
},
];

this.$set('users', users);
}
}
})

第二个组件的 JS:

Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})

更新

好的,我已经弄清楚了第二步。这是一个显示进度的新 fiddle :https://jsfiddle.net/retrogradeMT/9pffnmjp/

因为我使用的是 Vue-router,所以我不使用 props 将数据发送到新组件。相反,我需要在 v-link 上设置参数,然后使用转换 Hook 来接受它。

V-link 变化 see named routes in vue-router docs :

<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>

然后在组件上,将数据添加到路由选项see transition hooks :

Vue.component('newtemp', {
template: '#newtemp',
route: {
data: function(transition) {
transition.next({
// saving the id which is passed in url
name: transition.to.params.name
});
}
},
data: function() {
return {
name:name,
}
},
})

最佳答案

------------以下仅适用于Vue 1 --------------

可以通过多种方式传递数据。该方法取决于使用类型。


如果您想在添加新组件时从 html 传递数据。这是使用 Prop 完成的。

<my-component prop-name="value"></my-component>

仅当您添加属性名称 prop-name 时,此属性值才可用于您的组件给你的props属性。


由于某些动态或静态事件,数据从一个组件传递到另一个组件时。这是通过使用事件调度程序和广播程序来完成的。因此,例如,如果您有这样的组件结构:

<my-parent>
<my-child-A></my-child-A>
<my-child-B></my-child-B>
</my-parent>

并且您想从 <my-child-A> 发送数据至 <my-child-B>然后在 <my-child-A>你将不得不发送一个事件:

this.$dispatch('event_name', data);

此事件将沿着父链向上传播。无论你的 parent 是谁,你都有一个分支指向 <my-child-B>您将事件与数据一起广播。所以在 parent 中:

events:{
'event_name' : function(data){
this.$broadcast('event_name', data);
},

现在这个广播将沿着子链传播。在我们的例子中,无论你想在哪个 child 身上捕获这个事件<my-child-B>我们将添加另一个事件:

events: {
'event_name' : function(data){
// Your code.
},
},

第三种传递数据的方式是通过v-links中的参数。当组件链被完全破坏或 URI 更改时使用此方法。而且我可以看出您已经了解它们。


确定您想要的数据通信类型,然后进行适当的选择。

关于javascript - 将数据传递给 vue.js 中的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34534151/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com