前端路线--Vue3(day02)

获取DOM元素

<template>
  <div class="home">
    <!-- ref属性获取DOM元素-->
    <h2 :ref="getH2">获取DOM元素</h2>
  </div>
</template>

<script>
// @ is an alias to /src

export default {
  name: "HomeView",
  components: {},
  setup() {
    // 获取DOM元素
    let getH2 = (el) => {
      // el就是获得的DOM元素
      console.log(el);
      // 修改样式
      el.style.color = "red";
    };
    return {
      getH2,
    };
  },
};
</script>

父子组件之间传值

父传子

父组件中

<template>
  <div class="">
    <!-- 父传子 -->
    <h2>父组件--{{ msg }}--父亲的钱:{{ money }}</h2>
    <!-- 1.向子组件传值 在父组件内绑定自定义属性-->
    <SonPage :money="money"></SonPage>
  </div>
</template>

<script >
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import SonPage from "@/components/SonPage.vue";
import { reactive, ref, toRefs } from "vue";
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {
    SonPage,
  },
  setup() {
    //这里存放数据
    const data = reactive({});
    const data2 = toRefs(data);
	//父组件定义的数据
    let money = ref(1000);

    return {
      ...data2,
      money,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

子组件中

<template>
  <div class="">
    <h2>子组件</h2>
    <p>父亲传来的数据--:--{{ money }}</p>
  </div>
</template>

<script >
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import { reactive, toRefs } from "vue";
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {},
  //   需要用prop来进行接收
  props: {
    money: {
      type: Number,
      default: 0,
    },
  },
  //   接收父亲传过来的数据
  setup(props) {
    // props是父组件传递过来的数据
    console.log(props);
    //这里存放数据
    const data = reactive({});
    const data2 = toRefs(data);

    return {
      ...data2,
      sendDataToFather,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

子传父

子组件

<template>
  <div class="">
    <h2>子组件</h2>
    <button @click="sendDataToFather">点击向父组件传值</button>
  </div>
</template>

<script >
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import { reactive, toRefs } from "vue";
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {},
  setup(props, { emit }) {
    // emit是子组件用来传递给父组件的方法
    //这里存放数据
    const data = reactive({});
    const data2 = toRefs(data);

    let sendDataToFather = () => {
      // 向父组件进行传值
      // emit("自定义事件名",数据)
      let message = "Hello Dad!";
      emit("toFather", message);
    };
    return {
      ...data2,
      sendDataToFather,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

父组件:

<template>
  <div class="">
    <!-- 接收子组件传递的数据 -->
    <SonPage  @toFather="dataFromSon"></SonPage>
    <p>从子组件传递的值:--{{ sondata }}</p>
  </div>
</template>

<script >
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import SonPage from "@/components/SonPage.vue";
import { reactive, ref, toRefs } from "vue";
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {
    SonPage,
  },
  setup() {
    //这里存放数据
    const data = reactive({
      sondata: "",
    });
    const data2 = toRefs(data);

    // 接收子组件传递的数据
    let dataFromSon = (result) => {
    //result就是子组件传来的数据
      console.log(result);
      data.sondata = result;
    };

    return {
      ...data2,
      dataFromSon,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

provide()和inject()

//实现父套子,子套孙,父组件和后代组件之间的数据共享

祖先组件:

<template>
  <div class="">
    <h2>共享给后代的数据:{{ money }}</h2>
    <GrandSon></GrandSon>
  </div>
</template>

<script >
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import { provide, reactive, ref, toRefs } from "vue";
import GrandSon from "@/components/GrandSon.vue";

export default {
  //import引入的组件需要注入到对象中才能使用
  components: { GrandSon },
  setup() {
    //这里存放数据
    const data = reactive({});
    const data2 = toRefs(data);

    // 定义数据
    let money = ref(1000);
    // provide("属性",数据)--向后代组件提供数据
    //适用于父--》子--》孙嵌套共享数据
    provide("money", money);

    return {
      ...data2,
      money,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

后代组件中:

<template>
  <div class="">
    <h2>孙组件</h2>
    <p>孙组件共享父组件的值--{{ money }}</p>
  </div>
</template>

<script >
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import { inject, reactive, toRefs } from "vue";
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {},
  setup() {
    //这里存放数据
    const data = reactive({});
    const data2 = toRefs(data);

    // 接收祖先组件共享的数据
    //inject("祖先组件provide的属性")
    let money = inject("money");
    return {
      ...data2,
      money,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

Echarts的使用

<!--  -->
<template>
  <div class="">
    <!-- 
      echarts的使用:
      1.下载模块
      cnpm install echarts --save
      2.根据官方文档引入
      import * as echarts from "echarts";
      3.在methods中封装fn(){}将官方的API代码CV
      4.在Html中用一个盒子接收,设置宽高,修改fn()中byID的id
     -->
    <h2>echarts</h2>
    <!-- 基础柱状图 -->
    <div id="main" style="width: 600px; height: 300px"></div>
    <!-- 折线图 -->
    <div id="main2" style="width: 600px; height: 300px"></div>
    <!-- 3D地球 -->
    <div id="earch" style="width: 100%; height: 800px"></div>
  </div>
</template>

<script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import * as echarts from "echarts";
import "echarts-gl";

export default {
  //import引入的组件需要注入到对象中才能使用
  components: {},
  data() {
    //这里存放数据
    return {};
  },
  //计算属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {},
  //方法集合
  methods: {
    // 基础柱状图
    fn() {
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById("main"));
      // 绘制图表
      myChart.setOption({
        title: {
          text: "ECharts 入门示例",
        },
        tooltip: {},
        xAxis: {
          data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
        },
        yAxis: {},
        series: [
          {
            name: "销量",
            type: "bar",
            data: [5, 20, 36, 10, 10, 20],
          },
        ],
      });
    },
    //折线图
    fn2() {
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById("main2"));
      // 绘制图表
      myChart.setOption({
        xAxis: {
          type: "category",
          data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
        },
        yAxis: {
          type: "value",
        },
        series: [
          {
            data: [150, 230, 224, 218, 135, 147, 260],
            type: "line",
          },
        ],
      });
    },
    // 3D地球
    fn3() {
      var ROOT_PATH =
        "https://fastly.jsdelivr.net/gh/apache/echarts-website@asf-site/examples";
      var chartDom = document.getElementById("earch");
      var myChart = echarts.init(chartDom);
      var option;
      option = {
        backgroundColor: "#000",
        globe: {
          baseTexture: ROOT_PATH + "/data-gl/asset/world.topo.bathy.200401.jpg",
          heightTexture:
            ROOT_PATH + "/data-gl/asset/world.topo.bathy.200401.jpg",
          displacementScale: 0.04,
          shading: "realistic",
          environment: ROOT_PATH + "/data-gl/asset/starfield.jpg",
          realisticMaterial: {
            roughness: 0.9,
          },
          postEffect: {
            enable: true,
          },
          light: {
            main: {
              intensity: 5,
              shadow: true,
            },
            ambientCubemap: {
              texture: ROOT_PATH + "/data-gl/asset/pisa.hdr",
              diffuseIntensity: 0.2,
            },
          },
        },
      };

      option && myChart.setOption(option);
    },
  },
  beforeCreate() {}, //生命周期 - 创建之前
  //生命周期 - 创建完成(可以访问当前this实例)
  created() {},
  beforeMount() {}, //生命周期 - 挂载之前
  //生命周期 - 挂载完成(可以访问DOM元素)
  mounted() {
    // 使用fn
    this.fn();
    this.fn2();
    this.fn3();
  },
  beforeUpdate() {}, //生命周期 - 更新之前
  updated() {}, //生命周期 - 更新之后
  beforeDestroy() {}, //生命周期 - 销毁之前
  destroyed() {}, //生命周期 - 销毁完成
  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>
<style>
</style>

笔记

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值