Vue(二)

父向子的通信

  • 1、自定义一个局部组件;

  • 2、在父亲方注册该组件,并在body对应的组件中使用该组件,如果存在驼峰命名,可以使用-首字母变成小写字母,并对父子间的属性进行绑定;属性名称是自定义的,属性值是父亲方的属性名称;

  • 3、在儿子方通过props对属性进行二次绑定;

      <body>
          <div id="app">
              <!--自定义组件,:title是儿子方的属性,msg是父亲方的属性-->
              <introduce :title="msg"></introduce>
              <for-component :items="lessons"></for-component>
          </div>
      </body>
      <script src="node_modules/vue/dist/vue.js"></script>
      <script type="application/javascript">
          //定义一个局部组件
          const introduce = {
             template:"<h1>{{title}}</h1>",
              props:['title']
          };
          const forComponent = {
              template:"<ul><li v-for='(item,i) in items' >{{item}}</li></ul>",
              props:{
                  items:{
                      type:Array,
                      default:['java']
                  }
              }
          };
          const app = new Vue({
              el:"#app",
              data:{
                  msg:"大家好,我是渣渣辉!",
                  lessons:['java','php','python','python+AI']
              },
              components:{
                  introduce,forComponent
              }
          });
      </script>
    

子向父的通信

  • 1、在父亲方定义一个属性,并定义好方法;

  • 2、在组件上自定义属性,并和父亲方法进行绑定;

  • 3、在儿子方定义方法,并产生对组件属性的调用,使用this.$emit(‘属性名称’,参数…);

      <div id="app">
          <!--自定义属性,调用父亲方的什么方法,儿子方的什么属性绑定父亲方的属性设置-->
          <counter :num="count" @acer="add" @decr="reduce"></counter>
      
      </div>
      </body>
      <script src="node_modules/vue/dist/vue.js"></script>
      <script>
          const counter = {
              template:`
                  <div>
                  <button @click='handlerAdd'>+</button>
                  <button @click='handlerReduce'>-</button>
                  <h1>num:{{num}}</h1>
                  </div>
              `,
              props:['num'],//儿子方的属性
              methods:{
                  handlerAdd(){
                      this.$emit('acer');
                  },
                  handlerReduce(){
                      this.$emit('decr');//通过$emit动态的获取自定义属性,并调用父亲方的知道方法
                  }
              }
          };
          const app = new Vue({
              el:"#app",
              data:{
                  count:0
              },
              components:{
                  counter
              },
              methods:{
                  add(){//先在父亲方定义加减方法
                      this.count++;
                  },
                  reduce(){
                      this.count--;
                  }
              }
          });
      </script>
    

watch的对象监控

  • 定义一组对象

      person:{
               name:"谢兰",
               age:22
                  }
    
  • watch监控

      watch:{
                  person:{
                      deep:true,//开启深度监控
                      handler(val){//方法名称必须是Handler
                          console.log(val.age);
                      }
                  }
    

局部组件与全局组件

//vue的全局组件,使用vue的静态方法component对全局组件进行注册并初始化
    Vue.component("counter",{
        template:"<button v-on:click='count++'>你点了我{{count}}次</button>",
        data(){
            return{
                count:0
            }
        }
    });
    //局部注册组件,先声明一个组件,并在vue实例中进行注册,components组件
    const counter = {
        template:"<button v-on:click='count++'>你点了我{{count}}次</button>",
        data(){
            return{
                count:0
            }
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值