IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 10.24 父子传值 -> 正文阅读

[JavaScript知识库]10.24 父子传值

1、全局组件

全局组件

? ? 注册全局组件: ?Vue.component('组件名',{template:"标签模板"})

? ? 全局组件可以在不同的实例中使用

? ? 注意:组件名如果是驼峰写法 使用时必须 global-child 格式

? ? 注意:模板标签必须有一个根标签

? ? 组件中的数据必须是函数返回形式

? ? 组件中也可以添加事件 ?@click='handleClick'

局部组件

? ? 注意:只能在当前的组件实例对象中使用

? ? 注意:组件名如果是驼峰写法 使用时必须 global - child 格式

? ? 注意:模板标签必须有一个跟标签

? ? 组件中的数据必须是函数返回形式

? ? 组件中也可以添加事件 ?@click='handleClick'

<body>
? <div id="app">
? ? <p>{{msg}}</p>
? ? <!-- 使用全局组件 -->
? ? <global-child></global-child>
? ? <!-- 使用局部组件 -->
? ? <part-child></part-child>
</div>
<div id="app1">
? ? <!-- 使用全局组件 -->
? ? <global-child></global-child>
? ? <!-- 不能使用局部组件,没有注册 -->
? ? <!-- <part-child></part-child> -->
</div>
</body>
<script>
Vue.component('globalChild',{
? template:`<div @click='handleClick' style='display:flex' ><p>我是全局组件</p><p>奋斗的青春{{name}}</p></div>`,
? data:function(){
? ? return{
? ? ? name:'如今我是造梦的人啊'
? ? }
? },
? methods: {
? ? handleClick(){
? ? ? console.log('怅然若失流连忘返啊');
? ? }
? },
})
const vm = new Vue({
? el:'#app',
? data:{
? ? msg:'在这之前 别说再见',
? },
? components:{
? ? partChild:{
? ? ? template:`<p>我是局部组件---{{partname}}</p>`,
? ? ? data(){
? ? ? ? return {
? ? ? ? ? partname:'林晓峰'
? ? ? ? }
? ? ? }
? ? }
? }
})
const vm1 = new Vue({
? el:'#app1',
? data:{
? ? msg:'轻松一下'
? }
})
</script>

运行结果:

?组件嵌套:

<body>
? <div id="app">
? ? <p>{{msg}}</p>
? ? <!-- 使用全局组件 -->
? ? <global-child></global-child>
? ? <!-- 使用局部组件 -->
? ? <part-child></part-child>
</div>
</body>
<script>
Vue.component('globalChild',{
? template: `<div @click='handleClick' style='display:flex' ><p>我是全局组件</p><p>奋斗的青春{{name}}</p></div>`,
? data:function(){
? ? return {
? ? ? name:'cancel false cancel right'
? ? }
? },
? methods: {
? ? handleClick(){
? ? ? console.log('fill in be careful')
? ? }
? },
})
const vm = new Vue({
? el:'#app',
? data:{
? ? msg:'Lynchpin what is lynchpin'
? },
? components:{
? ? partChild: {
? ? ? ? ? ? ? ? // 局部组件里面嵌套了全局组件
? ? ? ? ? ? ? ? template: `<p>我是局部组件---{{partname}}-- <global-child></global-child></p>`,
? ? ? ? ? ? ? ? data() {// 组件数据写法
? ? ? ? ? ? ? ? ? ? return {
? ? ? ? ? ? ? ? ? ? ? ? partname: "jerry"
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? }
})
</script>

运行结果:

父传子

?组件使用的时候,单双标签都可以

?父传子 方法1

? ? 1.先给子组件设置一个属性 :tit='msg'

? ? 2.在子组件中使用props:["tit"] 接受传过来的属性

? ? 3.该属性就是传过来的数据

? ? 4.在子组件中传过来的属性和data中的数据使用方法一样

?父传子 方法2

? ? 1.先给子组件设置一个属性 :tit='msg'

? ? 2.子组件使用props:{tit:{default:456,type:Number}} 对象形式

? ? 3.default 表示默认值,及如果没有传过来属性,我就使用默认值

? ? 4.type 表示数据类型。对父组件传过来的数据类型做校验

? ? 5.type 和default 可以省略

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="js/vue.js"></script>
</head>
<body>
? <div id="app">
? ? <p>{{msg}}</p>
? ? <!-- 给子组件设置一个自定义属性 -->
? ? <globalchild :tit = 'msg' aa='100'/>
? </div>
</body>
<script>
Vue.component('globalchild',{
? template:`<p>我是全局组件--{{name}}---{{tit}}----{{aa}}</p>`,
? data(){
? ? return {
? ? ? name:'全局组件'
? ? }
? },
? props:{
? ? tit:{
? ? ? default:'456',//默认值
? ? ? type:String
? ? },
? ? aa:{}
? },
? created() {
? ? console.log('tit',this)//this 为子组件的实例对象
? ? console.log(this.tit);//123
? ? console.log(this.name);//全局组件
? },
})
const vm = new Vue({
? el:'#app',
? data:{
? ? msg:'123'
? },
? created(){
? ? console.log(1,this);//this为vm实例
? }
})
</script>
</html>

运行结果:

子传父

子传父步骤:通过事件进行传参

? ? 第一步:给子组件绑定事件 ?@click='emitFn'

? ? 第二步:在子组件事件函数中执行 this.$emit('自定义事件',数据)

? ? 第三步:在父组件上接受传过来的事件 ?

? ? 第四步:在父组件的methods 中定义该事件对应的执行函数getData

? ? 第五步:getData(m)中的形参就是传过来的数据

<body>
? <div id="app">
? ? <ul>
? ? ? <li v-for='item in boys' :key='item.id'>{{item.name}}</li>
? ? </ul>
? ? <partchild @transfer='getData' />
? </div>
</body>
<script>
? const vm = new Vue({
? ? el: '#app',
? ? data: {
? ? ? msg: '赵文卓',
? ? ? boys: [
? ? ? ? {
? ? ? ? ? id: 0,
? ? ? ? ? name: '热狗'
? ? ? ? },
? ? ? ? {
? ? ? ? ? id: 1,
? ? ? ? ? name: '尹正'
? ? ? ? }
? ? ? ]
? ? },
? ? methods: {
? ? ? getData(m) {
? ? ? ? console.log(m)
? ? ? ? this.boys = m
? ? ? }
? ? },
? ? components: {
? ? ? partchild: {
? ? ? ? template: `<p @click='emitFn'>我是局部组件---{{name}}</p>`,
? ? ? ? data: function () {
? ? ? ? ? return {
? ? ? ? ? ? name: '张晋',
? ? ? ? ? ? members: [
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? id: 0,
? ? ? ? ? ? ? ? name: '高瀚宇'
? ? ? ? ? ? ? },
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? id: 1,
? ? ? ? ? ? ? ? name: '白举纲'
? ? ? ? ? ? ? }
? ? ? ? ? ? ]
? ? ? ? ? }
? ? ? ? },
? ? ? ? methods: {
? ? ? ? ? emitFn() {
? ? ? ? ? ? console.log('你点的是子组件');
? ? ? ? ? ? console.log(this);//this是子组件的vue实例
? ? ? ? ? ? this.$emit('transfer', this.members)
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? })
</script>

子传父方法----ref

? ? ref 如果给普通标签添加 ?获取后是标签dom 节点

? ? ref 放在子组件上,获取的是当前子组件实例对象

? ? 总结: ref 方式 简单粗暴

? ? 给子组件设置ref 获取了该子组件的实例对象

<body>
? <div id="app">
? ? <p ref="p1">{{msg}}</p>
? ? <partchild ref="c"></partchild>
? ? <ul>
? ? ? <li v-for='(item,index) in fatherArr' :key='index'>
? ? ? ? {{item.name}}</li>
? ? </ul>
? </div>
</body>
<script>
? const vm = new Vue({
? ? el: '#app',
? ? data: {
? ? ? msg: '李承铉',
? ? ? fatherArr: []
? ? },
? ? mounted() {
? ? ? console.log(this.$refs.p1)//<p>XXX</p>
? ? ? console.log(this.$refs.c.childarr);//childarr数组内容
? ? ? this.fatherArr = this.$refs.c.childarr
? ? },
? ? components: {
? ? ? partchild: {
? ? ? ? template: `<p>我是局部子组件</p>`,
? ? ? ? data: function () {
? ? ? ? ? return {
? ? ? ? ? ? childarr: [
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? id: 0,
? ? ? ? ? ? ? ? name: '李珠衔'
? ? ? ? ? ? ? },
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? id: 1,
? ? ? ? ? ? ? ? name: '张淇'
? ? ? ? ? ? ? }
? ? ? ? ? ? ]
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? })
</script>

运行结果:

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:26:58  更:2021-10-25 12:29:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 14:07:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码