zoukankan      html  css  js  c++  java
  • Vue中常见参数传递方式

    文章内容:这里只有vue中父子组件传参、路由间的传参

    (另外还有vuex、储存本地、中央bus等方式);

    https://www.cnblogs.com/jing-zhe/p/11588401.html

    一、父子组件

    1.1父传子(props)

    <!-- 父组件father.vue -->
    <template>
      <div>
        <div>这里是father组件</div>
        <div>这是父组件要传给子组件的参数:{{msg}}</div>
        <!-- 1.传递:data1为动态参数msg的参数名,名字自定义,与子组件接收参数名同名
        data2为静态参数的参数名,名字自定义,与子组件接收参数名同名 -->
        <child :data1="msg" data2="777"></child>
      </div>
    </template>
    <script>
      import child from "./child";
    export default {
      data() {
        return {
          msg:"666"
        }
      },
      components: {
        child
      }
    };
    </script>
    <style scoped></style>

    <!-- 子组件child.vue -->
    <template>
      <div>
        <div>这里是child组件</div>
        <!-- 3.使用:这里就是接收的父组件参数 -->
        <div>接受的父组件动态参数:{{ data1 }}</div>
        <div>接受的父组件静态参数:{{ data2 }}</div>
        <div>接受的父组件参数:{{ data }}</div>
    </div>
    </template>
    <script>
    export default {
        // 2.接收:props接收父组件参数,data1与data2为传递参数的参数名,与父组件内同名
        props: ["data1", "data2"],
        data() {
          return {
            data: "默认值"
          };
        },
      // 3.使用:直接用this调用
      mounted() {
        this.data = this.data1;
      }
    };
    </script>
    <style scoped></style>

     这里要稍微注意一下,父组件所传递参数如果是需要在生命周期中获取赋值,就不能绑定在mounted中,否则子组件方法中this调用不会成功。生命周期顺序:父beforeMount->子beforeCreate……子mounted->父mounted

    1.2子传父($emit)

    <!-- 子组件child.vue -->
    <template>
      <div>
        <div>这里是child组件</div>
        <!-- 这里就是接收的父组件参数 -->
        <input type="button" value="点击向父组件传参" @click="toFather">
    </div>
    </template>
    <script>
    export default {
      data(){
        return{
          cmsg:'我是子组件的参数'
        }
      },
    methods: {
      toFather(){
    // 1.子组件触发父组件方法
    // $emit第一个参数为所要触发的父组件函数,函数名可自定义但要与父组件中对应函数名同名
    // $emit第二个参数就是子组件向父组件传递的参数
    this.$emit('receive',this.cmsg);
    }
    },
    };
    </script>
    <style scoped></style>

    <!-- father.vue -->
    <template>
    <div>
      <div>这里是father组件</div>
      <div>接收子组件参数:{{fmsg}}</div>
      <!-- 2.在对应子组件上绑定函数,这里“receive”是函数名,可自定义但要与子组件触发函数同名 -->
      <child @receive="fromChild"></child>
    </div>
    </template>
    <script>
      import child from "./child";
      export default {
        data() {
          return {
            fmsg:''
            };
      },
    methods: {
      // 接收子组件参数,赋值
      fromChild(data){
        this.fmsg=data;
      }
      },
    components: {
      child
      }
    };
    </script>
    <style scoped></style>

     二、路由间的参数传递(query和params)

    query和parmas的使用方式大致相同,这里简单介绍一下路由配置、参数的传递和调用

    2.1params,参数显示在url

    复制代码
    // router的配置
        {
          path: "/two/:id/:data",     // 跳转的路由后加上/:id,多个参数继续按格式添加,数据按顺序对应
          name: "two",
          component: two
        }

    // 跳转,这里message为123
      this.$router.push({
        path: `/two/${this.message}/456`     // 直接把数据拼接在path后面
      });
     // 接收
      created() {
          this.msg1=this.$route.params.id    // 123
          this.msg2=this.$route.params.data  // 456
       }

    // url显示,数据显示在url,所以这种方式传递数据仅限于一些不那么重要的参数
      /two/123/456
    复制代码

    2.2params,参数不显示在url,刷新页面数据消失

    复制代码
    // router的配置
        {
          path: "/two",
          name: "two",
          component: two
        }
    // 跳转,这里message为123
        this.$router.push({
          name: `two`,    // 这里只能是name,对应路由
          params: { id: this.message, data: 456 }
        });
     // 接收
      created() {
          this.msg1=this.$route.params.id    // 123
          this.msg2=this.$route.params.data  // 456
       }

    // url显示,数据不显示在url
      /two
     
    复制代码

    2.3query,参数显示在url

    复制代码
    // router的配置
        {
          path: "/two",
          name: "two",
          component: two
        }
    // 跳转,这里message为123
        this.$router.push({
          path: `/two`,    // 这里可以是path也可以是name(如果是name,name:'two'),对应路由
          query: { id: this.message, data: 456 }
        });
     // 接收
      created() {
          this.msg1=this.$route.query.id    // 123
          this.msg2=this.$route.query.data  // 456
       }
    
    // url显示,数据显示在url
      /two?id=123&data=456

     

  • 相关阅读:
    使用history.back()出现"警告: 网页已过期的解决办法"
    thinkphp5 如何将带分隔符的字符串转换成索引数组,并且遍历到前台
    MYSQL查询某字段中以逗号分隔的字符串的方法
    SpringBoot项目docker化
    全选Js
    【同步工具类】CountDownLatch
    Elasticsearch 2.3.2 安装部署
    从网络获取多张二维码图片,压缩打包下载
    传统的线程互斥技术:Synchronized关键字
    定时器的编写
  • 原文地址:https://www.cnblogs.com/xzybk/p/12501170.html
Copyright © 2011-2022 走看看