我很难理解如何在vue中的组件之间传递数据.js.我已经多次阅读了这些文档,并查看了许多与vue相关的问题和教程,但我仍然不明白.

我希望大家能帮我完成一个简单的例子

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

这是一把小提琴,它在第二步失败:https://jsfiddle.net/retrogradeMT/d1a8hps0/

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

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,
        }
   },
})

UPDATE

好的,我已经想出了第二步.这是一把新小提琴,显示了进步:https://jsfiddle.net/retrogradeMT/9pffnmjp/

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

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传递数据.这是用props 完成的.

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

仅当将props 名称prop-name添加到props属性时,此props 值才可用于组件.


由于某个动态或静态事件,数据从一个组件传递到另一个组件时.这是通过使用事件调度员和广播员来实现的.例如,如果你有这样的组件 struct :

<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);

这一事件将一直传播到父链的upstream .无论你从哪个家长那里获得<my-child-B>个分支,你都会将事件与数据一起广播.所以在父母身上:

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

现在,这个广播将沿着 children 链传播.无论哪个子元素想要参加活动,在我们的 case <my-child-B>中,我们将添加另一个活动:

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

传递数据的第三种方法是通过v-links中的参数.当组件链被完全销毁或URI发生更改时,使用此方法.我看你已经理解了.


确定您想要的数据通信类型,并进行适当的 Select .

Vue.js相关问答推荐

try 在类星应用程序中使用Vue插件(Vue 3 Mq)-如何配置?

当props 的值改变时如何更新类'

VueUse onClickOutside不支持右键单击

设置Vite Vue 3需要多个应用程序输出目录

vuejs中如何获取数组总长度

视图中的 vue 样式不适用于 html

vue.js 在 App.vue 中获取路由名称

如何在 Vue.js 中获取完整的当前日期和时间,而无需编写大量 JavaScript 行

Vue:如何将 store 与组件一起使用?

如何将Vue的主应用程序渲染到body元素?

Vuetify v-select 组件宽度变化

Keycloak:用户基于角色的客户端登录访问限制

怎样1秒后自动隐藏VueJS中的元素

数据更新后触发 Vue.js 事件

vue-router的router-link实际刷新?

交换数组项

如何避免在 Vue 中一直写 this.$store.state.donkey 的需要?

emit更新数组不起作用

如何在 Vue.js 中延迟 @keyup 处理程序

在 Vuejs 中放置 firebase.auth().onAuthStateChanged() 的位置