vue computed、vue watch、组件、父子组件、模板分离、prop传值、emit传值

一、computed 和 methods
computed 依赖缓存
methods每次都重新执行
除此以外注意html中调用的写法上的不同:
在这里插入图片描述

//箭头写法,传递this
computed: {
    totalPage: _this => _this.tableList.length,
    fileName: _this => _this.dataForm.file.length ? _this.dataForm.file[0].raw.name : null
  },

二、watch监控
watch可以提取到每一次变化发生时,变化后的值和变化前的值
在这里插入图片描述

在这里插入图片描述
三、组件
(语法知识点:template中的内容如果有很多条需要用一个大<div>......</div>包裹起来。)
3.1创建构造器+注册组件
全局组件
局部组件

3.2语法糖
Vue.component('标签名',{template:'<div>......</div>'})
在这里插入图片描述
在Vue实例里添加compoents:{'标签名':{template:'<div>......</div>'}}
在这里插入图片描述

四、父子组件(用语法糖版本)

在这里插入图片描述
在这里插入图片描述
五、模板分离
5.1template
在这里插入图片描述

5.2script type=“text/x-template”
在这里插入图片描述

六、组件里创建变量
1
但是要注意这样一个错误:2
图2与图1的区别在于,图2的返回值是一个对象,图1的返回值是一个值。对于数据的存储,对象会返回那个对象的地址,而如果仅仅是个值就会新创建一个对象取其地址,每次的创建都是不同的对象不同的地址。
这也是为什么data要写成data()的原因,data是一个function而不是一个属性

七、父组件向子组件传值props
在这里插入图片描述
八、子组件向父组件传值emit
1监控鼠标点击事件click→2子节点执行click1方法(emit发射被接收的事件名和数据)→3父节点接收clicked事件(带数据)→4执行change方法

在这里插入图片描述

注:为什么④change不是change(msg),因为root组件下没定义msg,msg只是被存在root组件下,可以被方法调用,但是我们不能调用,这里还没找到更好更对称的写法

例1:子传父+信息提取
在这里插入图片描述
在这里插入图片描述

<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>

<div id="app">
    <h1>您点击的是{{msg}}</h1>
    <html-button v-on:itemclick="change1"></html-button>
</div>

<template id="btn">
    <div>
      <button v-for="item in btnmsg" v-on:click="click1(item)">{{item.name}}</button>
    </div>
</template>

<script>
   Vue.component('html-button',{
       template:'#btn',
       data(){
           return{
               btnmsg:[
                   {id:'1',name:'yi'},
                   {id:'2',name:'er'},
                   {id:'3',name:'san'},
                   {id:'4',name:'si'},
               ]
           }
       },
       methods:{
           click1(item){
            this.$emit('itemclick',item )
           }
       }
   })
    new Vue({
	    el: '#app',
        data:{
            msg:''
        },
        methods:{
            change1(item){
                this.msg=item.id
            }
        }
    })
</script>

Vue 3 中,父子组件之间的数据传递主要有以下几种方式: 1. **props** (属性绑定): 父组件通过 props 向子组件传递数据。父组件将数据作为属性传递给子组件,然后在子组件内通过 prop 的名称来接收这个数据。这是单向的数据流,防止了修改父组件的状态。 ```javascript // 父组件 <template> <child-component :value="parentValue"/> </template> <script> export default { data() { return { parentValue: 'default value' }; }, }; </script> // 子组件 <template> <div>{{ value }}</div> </template> <script> export default { props: ['value'], }; </script> ``` 2. **自定义事件($emit/$on)**: 如果需要双向绑定,或者在子组件状态改变时通知父组件,可以使用自定义事件 $emit 和 $on。子组件触发 `$emit('some-event', data)`,父组件监听并处理这个事件。 ```javascript // 父组件 <template> <child-component @childEvent="handleChildEvent" /> </template> <script> methods: { handleChildEvent(data) { this.parentValue = data; } } </script> // 子组件 <template> <button @click="$emit('childEvent', newValue)">Change Value</button> </template> ``` 3. **ref 和 computed** (引用属性和计算属性): 当需要在子组件内部访问或修改传递过来的数据时,可以使用 ref。如果需要基于子组件的数据动态计算出新的值,可以用 computed。 ```javascript // 父组件 <template> <child-component :value="parentValueRef.value" /> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, setup() { const parentValueRef = ref(''); // ... }, }; </script> // 子组件 <template> <input v-model="localValue" @input="$emit('update:value', localValue)"> </template> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值