首页 > 编程 > JavaScript > 正文

Vue中组件之间数据的传递的示例代码

2019-11-19 15:30:29
字体:
来源:转载
供稿:网友

Vue中组件的作用域是隔离的,父组件中的数值子组件看不到!也就是说,用angular作比喻,组件的scope天生是scope:()的!
如果父组件需要往子组件中传数据,此时应该使用标签属性:

<div id="app">   <my-compo c="886"></my-compo></div>

子组件中,用props声明这个值即可。并且在template里面可以直接使用{{c}}来获得这个属性,而不需要写为{{this.props.c}}

import Vue from "vue";const MyCompo = Vue.extend({  template : `    <div>      <h1>我是MyCompo组件,我的a值是{{a}}</h1>      <h1>子组件c:{{c}}</h1>      <input type="button" value="+++" v-on:click="add"/>    </div>  `,  props : ["c"],  data : function(){    return {      a : 1,       b : 2    }  },  methods : {    add : function(){      this.a ++;    }  }});export default MyCompo;

如果父组件中要传一个动态的值(就是父组件的data,不是死数),此时要用v-bind:来传递。
v-bind指令表示动态属性。

<div id="app">   <my-compo v-bind:c="c"></my-compo></div>

此时我们研究,子组件改变了这个值,父组件的值变不变。答:默认情况下不变!

<my-compo v-bind:c="c"></my-compo>import Vue from "vue";const MyCompo = Vue.extend({  template : `    <div>      <h1>我是MyCompo组件,我的a值是{{a}},我的c值是:{{c}}</h1>      <input type="button" value="+++" v-on:click="add"/>    </div>  `,  props : ["c"],  methods : {    add : function(){      this.c ++;    }  }});export default MyCompo;

子组件的c值变化了,但是外面不变!

也就是说,默认情况下,父组件中的属性值如果传给儿子,子组件改变这个值,仅仅改变子组件中的值,父组件中的值不变。

如果非要让子组件能够改变父组件中的值,要加sync修饰符:

<my-compo v-bind:c.sync="c"></my-compo>

上面的c属性是一个基本类型值常数3。此时我们试试引用类型值。

父组件中增加d属性,值是json。

import Vue from "vue";import MyCompo from "./components/MyCompo.js";new Vue({  el : "#app",  data : {    c : 333,    d : {      v : 8888    }  },  components : {    "my-compo" : MyCompo  }});

传给子组件:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Vue学习</title></head><body>  <div id="app">    <h1>我是父亲,我的c: {{c}} ,我的d:{{d | json}}</h1>     <my-compo v-bind:c.sync="c" v-bind:d="d"></my-compo>  </div>  <script type="text/javascript" src="public/bundle.js"></script></body></html>

子组件改变d的时候,父亲也变了!!!虽然我们没加.sync。

总结:

Vue中基本类型值默认单向传递,双向加sync。

引用类型值,默认双向传递。

小tip,v-bind的缩写语法就是冒号。

属性可以验证类型、必填等等。

props : {    "c" : null,    "d" : null,    "e" : {      type : Number,      required : true    }},

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表