父子组件传值

一、准备工作

在 html 中利用链接引入所需。
(此处引入如下:)

<!-- 引入VUE -->
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<!-- 引入样式 -->
   <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
   <script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- 引入axios -->
   <script src="https://cdn.jsdelivr.net/npm/axios@1.3.4/dist/axios.min.js"></script>

一、创建定义并引用组件

1.在html中创建子组件

<template id="子组件名"><div>  </div></el-dialog>

2.定义子组件

 <script>
 Vue.component('引用子组件名', {
 template: '#子组件名',
 }
  1. 父组件引用组件
 <引用子组件名></引用子组件名>

总结:

<div id="app">
  <h3>页面引用定义好的按钮组件</h3>
  <zujian></zujian>
</div>
<template id="templ"> 
    <el-button plain>朴素按钮</el-button>    
</template>
<script>
  Vue.component('zujian',{
    template: '#templ',
  })
</script>

简单实例代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title> VUE+ELEMENT-UI 图书列表 </title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <!-- 引入样式 -->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <!-- 引入组件库 -->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/axios@1.3.4/dist/axios.min.js"></script> 
</head>
<body>
<div id="app">
  <h3>页面引用定义好的按钮组件</h3>
  <zujian></zujian>
</div>
<template id="templ">
  <el-row>
    <el-button plain>朴素按钮</el-button> 
    <el-button type="success" plain>成功按钮</el-button> 
  </el-row>
</template> 
<script>
  Vue.component('zujian',{
    template: '#templ',
  })
</script>
<script>
  var vm=new Vue(
          {
            el:"#app",
          }
  );

</script>
</body>
</html>

二、父子组件传值

子组件定义中: props[‘信息’] (与 data 齐平)

<script>
  Vue.component('bk_dialog', {
    template: '#dialog',
    data() { return { form: {  date: '',  name: '' } } },
    props:['dates'],
    methods: {
      showdialog(){
        this.dates=this.from;
        this.dialogFormVisible=true;
      },
    }
  })
</script>

子组件的引用中绑定 :信息
<引用子组件名 :信息=“scope.row”></引用子组件名>

   <template slot-scope="scope">
          <bk_dialog :dates="scope.row"></bk_dialog>
        </template>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title> VUE+ELEMENT-UI 图书列表 </title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <!-- 引入样式 -->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <!-- 引入组件库 -->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>

  <script src="https://cdn.jsdelivr.net/npm/axios@1.3.4/dist/axios.min.js"></script>
  <style>

  </style>
</head>
<body>
<div id="app">
    <h3>列表</h3>
      <tables></tables>
</div>
<template id="templ">
  <div>
    <el-table
          :data="tableData"
          style="width: 100%">
    <el-table-column
            label="日期"
            width="180">
      <template slot-scope="scope">
        <i class="el-icon-time"></i>
        <span style="margin-left: 10px">{{ scope.row.date }}</span>
      </template>
    </el-table-column>
    <el-table-column
            label="姓名"
            width="180">
      <template slot-scope="scope">
        <el-popover trigger="hover" placement="top">
          <p>姓名: {{ scope.row.name }}</p>
          <p>住址: {{ scope.row.address }}</p>
          <div slot="reference" class="name-wrapper">
            <el-tag size="medium">{{ scope.row.name }}</el-tag>
          </div>
        </el-popover>
      </template>
    </el-table-column>
    <el-table-column label="操作">
        <template slot-scope="scope">
          <bk_dialog :dates="scope.row"></bk_dialog>
        </template>
    </el-table-column>
  </el-table>
  </div>
</template>

<template id="dialog">
  <div>
    <el-button type="success" size="mini" @click="dialogFormVisible = true"plain>编辑</el-button>

    <el-dialog title="修改数据" :visible.sync="dialogFormVisible"> 
        <el-form :model="dates">
        <el-form-item label="日期" :label-width="formLabelWidth">
          <el-input v-model="dates.date" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="姓名" :label-width="formLabelWidth">
          <el-input v-model="dates.name" autocomplete="off"></el-input>
        </el-form-item> 
      </el-form>
      <div slot="footer" class="dialog-footer">
<!--  点击事件@click="dialogFormVisible = false"            -->
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
  Vue.component('bk_dialog', {
    template: '#dialog',
    data() {
      return {
        form: {
          date: '',
          name: ''
        },
        dialogFormVisible: false,
        formLabelWidth: '120px'
      }
    },
    props:['dates'],
    methods: {
      showdialog(){
        this.dates=this.from;
        this.dialogFormVisible=true;
      },
    }
  })
</script>
<script>
  Vue.component('tables',{
    template: '#templ',
    data() {
      return {
        tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }]
      }
    },
    methods: {
      handleEdit(index, row) {
        console.log(index, row);
      },
      handleDelete(index, row) {
        console.log(index, row);
      }
    }
  })
</script>
<script>
  var vm=new Vue(
          {
            el:"#app",
          }
  );
</script>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

Vue.js中,父子组件之间的通信主要通过props和emit两种方式来实现。具体实现方法如下: 1. 父组件向子组件传值 父组件可以通过props属性向子组件传递数据,子组件通过props选项接收数据。例如: ```html <template> <div> <child :message="parentMessage"></child> </div> </template> <script> import Child from './Child.vue' export default { components: { Child }, data () { return { parentMessage: 'Hello from parent' } } } </script> ``` 子组件可以通过props选项接收数据,并在模板中使用该数据。例如: ```html <template> <div> {{ message }} </div> </template> <script> export default { props: ['message'] } </script> ``` 2. 子组件向父组件传值 子组件可以通过emit方法向父组件传递数据,父组件通过v-on指令监听子组件的事件并接收数据。例如: ```html <template> <div> <button @click="sendMessage">Send message to parent</button> </div> </template> <script> export default { methods: { sendMessage () { this.$emit('message', 'Hello from child') } } } </script> ``` 父组件可以通过v-on指令监听子组件的事件,并在相应的方法中接收数据。例如: ```html <template> <div> <child @message="handleMessage"></child> </div> </template> <script> import Child from './Child.vue' export default { components: { Child }, methods: { handleMessage (message) { console.log(message) } } } </script> ``` 以上就是父子组件传值的两种方法。需要注意的是,在使用props和emit时,要遵循单向数据流的原则,即只能从父组件向子组件传递数据,不能反过来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值