我的Vu啊(vue 2.0,数据监听,计算属性,组件传参)

本文介绍了Vue.js中的计算属性computed和数据监听watch的使用。计算属性用于创建基于其他数据的衍生数据,并自动缓存结果,而watch则用于监听数据变化并执行相应操作。文中通过实例展示了如何使用这两个特性,包括计算属性的get和set方法,以及watch的深度监视和事件处理。此外,还讨论了父子组件间通信的方法,如prop、事件emit、ref和Vue Bus。
摘要由CSDN通过智能技术生成

提示:个人Vue学习工作总结  (持续更新中如果有不对的地方还请前辈多多指点)

文章目录

  • vue 计算属性 computed
  • vue  数据监听 wacth


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是计算属性 (computed)

一般用监视后端没有,但是需要的数据前端展示,比如姓名 

     

                              

  let vaue = new vue({

                            el:'#vue',

                           data:{

                               

                                        name:'张三'

                                          computed:{

                                           name () => return    xiang + mig

                                          }

                            }

                })

计算属性的特点可以缓存数据节省资源,但是不可以处理异步加载

计算属性有get 和 set 来进行数据的控制

二、什么是监视属性 (wacth) 监视数据的变化

      

<template>
   <div>
     姓名: {{names}}
     <br>
     <br>
     <br>
     <br>
     <input v-model="names" placeholder="请开始你的表演">
     <br>
     <br>
     <br>
     <br>
     阿黄的年龄: {{Dog.age}}
     <input v-model="Dog.age" placeholder="请开始你的表演">
     <br>
     <br>
     <br>
     <br>
      年龄: {{age}}
     <input v-model="age" placeholder="请开始你的表演">
   </div>
</template>

<script>

import Student from '@/components/Student.vue';

export default {
  name: 'Home',
  components: {
    // eslint-disable-next-line vue/no-unused-components
    Student,
  },
  data() {
    return {
      names: '张三',
      age: 23,
      Dog: {
        name: 'zhangsna',
        age: 30,
      },
    };
  },
  watch: {
    age(newValue, oldValue) {
      console.log(newValue, oldValue);
    },
    'Dog.age': {
      handler(newValue, oldValue) {
        console.log(newValue, oldValue);
      },
    },
    names: {
      // 深度监视
      deep: true,
      // 初始化监视 deep 用于对象或者更深的层级开启后会监视全部
      immediate: true,
      handler(newvVaue, oldValue) {
        // newvalue新的值  oldValue 旧的值
        console.log(newvVaue);
        console.log(oldValue);
      },
    },
  },
  mounted() {
  },

};
</script>

父传子 proper 

子传父亲 emit 但是有很多不同的监视方法例如 ref 和 自定义方法

跨组件 vuebus

父亲组件

<template>
   <div>
          <button @click="getAallValue()"></button>
          <student :age="age"  ref="student"  @sentValue='sentValue' :name="Dog.getname"></student>
   </div>
</template>

<script>

import Student from '@/components/Student.vue';
// import { Datas } from '../data';
export default {
  name: 'Home',
  components: {
    Student,
  },
  data() {
    return {
      age: 23,
      Dog: {
        name: 'zhangsna',
        age: 30,
        getname: () => {
          console.log(this.Dog);
        },
      },
    };
  },
  methods: {
    getAallValue() {
      this.$refs.student.chengname();
    },
    sentValue(value) {
      console.log('valuefff', value);
    },
    getValue() {
      console.log('沧海桑田');
    },
    myVuebus() {
      console.log('跨组件传参');
    },
  },
  created() {
  },
  mounted() {
    // vuebus跨组件传参
    this.$bus.$on('sentValue', this.myVuebus);
    // ref实例接收监视
    this.$refs.student.$on('sentValue', this.sentValue);
    // ref实例监视
    this.$refs.student.$once('sentValue', this.sentValue);
  },
};
</script>

 子组件

<template>
   <div>
     <div>{{name}}</div>
     <div>{{age}}</div>
     <slot :showname="name" name="luchao">我是插槽</slot>
     <div @click="name()">点击提示信息</div>
     <div @click="chengname()">唐僧的爱好</div>
   </div>
</template>

<script>

export default {
  // 数组形式
  // props: ['name', 'age'],
  // 对象形式
  props: {
    name: {
      type: Function,
    },
    age: {
      type: Number,
      default: 0,
      required: true,
    },
  },
  data() {
    return {
      // eslint-disable-next-line vue/no-dupe-keys
      showname: '我不是陆超',
    };
  },
  beforeDestroy() {
    this.$bus.$off('sentValue');
  },
  methods: {
    chengname() {
      console.log('value');
      this.$emit('sentValue', this.showname);
      this.$bus.$emit('sentValue', this.showname);
    },
  },
};
</script>

<style scoped>

</style>

vue bus 核心核心创建 例外可以在appvue里运用原型链进行创建垮组件传参

import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';

Vue.config.productionTip = false;

new Vue({
  router,
  store,
  render: (h) => h(App),
  beforeCreate() {
    Vue.prototype.$bus = this;
  },
}).$mount('#app');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值