20190224-vue学习笔记5

20190224-vue学习笔记5

对数据的 push() 操作

先看个栗子:

 data(){	///声明
            return {              
                buycarlist:[],
                buycar:'',
            }
        },
methods: {
            addpushbuycar:function () {
                this.buycarlist.push(this.buycar);
                this.buycar='';

            },
            removed_buy:function () {
                //清空购物车,
                this.buycarlist=[];

            }
        },
 <div>
            <span>购物商品:</span><input type="text"  v-model="buycar" >
            <button v-on:click="addpushbuycar">添加到购物车</button>

            <ul>
                <li v-for="list in buycarlist ">{{list}}</li>
            </ul>
        </div>

效果如下:
在这里插入图片描述
this.buycarlist.push(this.buycar);, 将变量buycar变化后的值,附在数组上,最后,用v-for循环显示出来。

“父”与“子”之间的传递参数

props属性是父子组件之间的通信桥梁。
何为父子组件?从子组件的观点来看,他的上一级实例或组件即为他的父组件。
可以这样理解:
父:以下指的是views 中的vue,
子:以下指的是components中的vue,组件文件;

处于安全考虑,组件模板里我们无法直接使用父组件的data数据,使用props这个属性可以将父组件的数据传给子组件。

父组件->子组件:props
子组件->父组件:触发事件

父向子传参prop

父组件的数据需要通过 prop 才能下发到子组件中。
prop一般用于父组件向子组件进行单向通信(父向子传值),传递的可以是字符串、也可以是表达式、也可以是一个对象,也可以是一个数组,甚至是一个布尔值。

也就是props是子组件访问父组件数据的唯一接口。
看以下案例,

//父组件 home.vue
写法:

`:father_msg="msg"  //传入的变量名(传给儿子的)=“变量”,这里的变量在父组件的data()中声明的。
<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="传第1个参数: Welcome to XXX Vue.js Apptest" msg11="传第2个参数:123456"/>
    <MyComptsTest :father_msg="msg" :father_msgExp="msgExpA+msgExpB" :father_arrray="msgArray" ></MyComptsTest>
  </div>
</template>

export default {
  name: 'home',
  components: {
      //调用HelloWorld.vue的组件
    HelloWorld,
    MyComptsTest
  },
    data(){
      return {
          msg:'我是父组件向子组件传递的值',
          msgExpA:'props也可以是一个表达式:表达式A',
          msgExpB:',表达式B',

          msgArray:[
              {
                  id:1,
                  msg:'props也可以是一个数组',
              },
              {
                  id:2,
                  msg:'用v-for进行循环渲染',
              },
          ],
      }
    }
}
</script>

//子组件 MyComptsTest.vue

<div>
            <h1>{{ father_msg }}</h1>
            <h3>{{father_msgExp}}</h3>
            <ul>
                <li v-for='item in father_arrray' :key='item.id' >
                    <h4>{{item.msg}}</h4>
                </li>
            </ul>
        </div>
data(){
      return {
       props:[		//接收父组件传入的变量
            'father_msg',    //单引号,双引号都可以
            "father_msgExp",
            "father_arrray",
        ],
      }
}

效果如下:
在这里插入图片描述
除了传递变量,也可以传递方法、函数,
上面例子,改进下,

//父组件

methods: {
        click_button:function () {
            alert("这是传递给子组件的单击事件:"+this.msg);
            console.log('父组件显示的内容!');
        }
    },
 <MyComptsTest :father_msg="msg" :clickevent="click_button"  ></MyComptsTest>

//子组件

props:[
            'father_msg',    //单引号,双引号都可以
//            "father_msgExp",  //不屏蔽也不会报错
//            "father_arrray",
            "clickevent",   //单击事件
        ],
<button @click="clickevent">单击事件</button>

效果如下:
在这里插入图片描述

子向父的数据进行处理

父组件的数据通过props传入子组件以后,在子组件中也可对数据进行相关处理,包括计算属性、data属性等。这样当子组件需要对数据进行处理时,避免了直接在父组件中对数据进行操作,而且由于props数据流单向性,在子组件中更改数据时,不会对父组件的数据产生影响。

子向父的数据进行处理,其实可以理解为,父提供方法/函数,让子来调用,修改父组件的变量/值,也就是说,如果父组件没有提供这些方法/函数,子组件是无法修改父组件的变量/值。
呈上代码:

//父组件

data(){
      return {
        msg_number:100,
      }
}
methods: {
       addnumber:function () {
                console.log('前 父组件+1:'+this.msg_number);
            this.msg_number= this.msg_number+1;
                console.log('后 父组件+1:'+this.msg_number);
        },
        reducenumber:function () {
                console.log('前 父组件-1:'+this.msg_number);
            this.msg_number= this.msg_number-1;
                console.log('后 父组件-1:'+this.msg_number);
        }
       
    },

这里传递的时候,要用 @father_add_number 写法

<MyComptsTest  :father_number="msg_number" @father_add_number="addnumber" @father_reduce_num="reducenumber"   ></MyComptsTest>

///子组件

第一步:先接收父组件的变量/方法

props:[
//单引号,双引号都可以
            "father_number",
            "father_add_number",
            'father_reduce_num',
        ],

第二步:在methods关联上父组件的方法,$emit就是关联父组件方法,如果不写上关联方法,是不会起作用的

 methods: {
            son_add:function () {
                    console.log('前 子+1:'+this.father_number);
                this.$emit('father_add_number');    //$emit这是关联父组件传给的方法father_add_number
                    console.log('后 子+1:'+this.father_number);
            },
            son_reduce:function () {
                    console.log('前 子-1:'+this.father_number);
                this.$emit('father_reduce_num');   //$emit这是关联父组件传给的方法father_reduce_num
                    console.log('后 子+1:'+this.father_number);
            },
        },

第三步:调用在methods声明的方法

			<div >计算的父变量:{{ father_number }}</div>
            <button @click="son_add">加法:+1</button>
            <button @click="son_reduce">减法:-1</button>

效果如下:
在这里插入图片描述
点击 加+1:
在这里插入图片描述
点击 减-1:
在这里插入图片描述

在调用父组件的方法,在事件的前后都分别加上console.log,来监控,父组件传递的参数“msg_number”的值,结果如下:
在这里插入图片描述
结果发现了,在页面前端,父组件的参数“msg_number”,是98,而在后台,子组件获得这个变量的值,依然是“100”。
也就是说,子组件通过父组件的方法,即使是修改了父的变量,子组件后台要通过下次触发才能重新获取到变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值