Vue1.0学习总结(4)———Vue1.0自定义组件、Vue1.0组件之间的通信

Vue自定义组件:

组件:就是一个大的对象:new Vue({})就是一个组件
定义一个组件:
1.全局组件:
  <div id="box">
    <aaa></aaa>
  </div>
  var Aaa=Vue.extend({
    template:‘<h3>我是一个标题</h3>‘
  });
  Vue.component(‘aaa‘,Aaa);

a)给自定义的组件添加数据:
  data必须是函数的形式,函数必须返回一个对象(json)
  var Aaa=Vue.extend({
    data(){ //data必须是函数
      return{ //必须return一个对象
        msg:‘我是一个标题‘
      };
    },
    template:‘<h3>{{msg}}</h3>‘
  });
  Vue.component(‘aaa‘,Aaa);

b)给自定义的组件绑定事件
  var Aaa=Vue.extend({
    data(){ //data必须是函数
      return{ //必须return一个对象
        msg:‘我是一个标题‘
      };
    },
    methods:{ //给自定义的组件绑定事件
      change(){
        this.msg="change";
      }
    },
    template:‘<h3 @click="change">{{msg}}</h3>‘
  });
  Vue.component(‘aaa‘,Aaa); //component放在外部

2.局部组件(子组件)
把自定义的组件放到某一个组件内部
<script type="text/javascript">
  var Aaa=Vue.extend({
    data(){ //data必须是函数
      return{ //必须return一个对象
        msg:‘我是一个标题‘
      };
    },
    methods:{ //给自定义的组件添加事件
      change(){
        this.msg="change";
      }
    },
    template:‘<h3 @click="change">{{msg}}</h3>‘
  });

  var vm = new Vue({
    el:‘#box‘,
    data:{
      bsign:true
    },
    components:{ //components放在根组件vue内部,为局部组件
      ‘aaa‘:Aaa
    }
  });
</script>
=====================================================

定义组件的另一种编写方式:
  <div id="box">
    <my-aaa></my-aaa>
  </div>
1)全局组件:
<script type="text/javascript">
  Vue.component(‘my-aaa‘,{
    data(){
      return{
        msg:‘标题1111‘
      }
    },
    methods:{
      toggle(){
        this.msg="change"
      }
    },
    template:‘<strong @click="toggle">{{msg}}</strong>‘
  });
  var vm = new Vue({
    el:‘#box‘
  });
</script>

2)局部组件:
<script type="text/javascript">
  var vm = new Vue({
    el:‘#box‘,
    components:{
      ‘my-aaa‘:{
        data(){
          return{
            msg:‘标题2233‘
          }
        },
        methods:{
          toggle(){
            this.msg="change"
          }
        },
        template:‘<strong @click="toggle">{{msg}}</strong>‘
      }
    }
  });
</script>
============================================================

配合模板自定义组件:(即template里面的代码)
1.直接放到template里面
  template:‘<strong @click="toggle">{{msg}}</strong>‘

2.单独放到某一个地方
a)都放到一个script标签里面
<script type="x-template" id="aaa">
  <strong @click="toggle">{{msg}}</strong>
  <ul>
    <li>111</li>
    <li>111</li>
    <li>111</li>
    <li>111</li>
  </ul>
</script>
<script type="text/javascript">
  Vue.component(‘my-aaa‘,{
    data(){
      return{
        msg:‘标题1111‘
      }
    },
    methods:{
      toggle(){
        this.msg="change"
      }
    },
    template:‘#aaa‘ //写的是id属性
  });
  var vm = new Vue({
    el:‘#box‘
  });
</script>

b)放到template标签里面(*推荐使用)
<template id="aaa">
  <strong @click="toggle">{{msg}}</strong>
  <ul>
    <li v-for="val in arr">{{val}}</li>
  </ul>
</template>

<script type="text/javascript">
  Vue.component(‘my-aaa‘,{
    data(){
      return{
        msg:‘标题1111‘,
        arr:[‘apple‘,‘banana‘,‘orange‘]
      }
    },
    methods:{
      toggle(){
        this.msg="change"
      }
    },
    template:‘#aaa‘
  });
  var vm = new Vue({
    el:‘#box‘
  });
</script>
===========================================
定义动态组件:
可实现标签切换:
<div id="box">
  <input type="button" value="我是aaa组件" @click="a=‘aaa‘">
  <input type="button" value="我是bbb组件" @click="a=‘bbb‘">
  <component :is="a"></component> //*自定义动态组件
</div>
<script type="text/javascript">
  var vm = new Vue({
    el:‘#box‘,
    data:{
      a:‘aaa‘
    },
    components:{
      ‘aaa‘:{
        template:‘<h2>我是标题aaa</h2>‘
      },
      ‘bbb‘:{
        template:‘<h2>我是标题bbb</h2>‘
      }
    }
  });
</script>

父子组件的定义
<div id="box">
  <aaa></aaa>
</div>

var vm = new Vue({
  el:‘#box‘,
  data:{
    a:‘aaa‘
  },
  components:{
    ‘aaa‘:{
      template:‘<h2>我是标题aaa</h2><bbb></bbb>‘,
      components:{
        ‘bbb‘:{
          template:‘<h2>我是标题bbb</h2>‘
        }
      }
    }
  }
});
--------------------------------------------------------
vue在默认情况下,子组件没法访问父组件的数据
组件之间数据的传递(推荐使用)
1.子组件想获取父组件的data,通过props方法
props有两种写法:
1)props:[‘m‘,‘myMsg‘]
2)props:{
  m:String,
  myMsg:Number
 }

<div id="box">
  <aaa></aaa>
</div>

<template id="aaa">
  <h2>1111111-->{{msg}}</h2>
  <bbb :m="msg" :my-msg="msg1"></bbb>
</template>

<script type="text/javascript">
  var vm = new Vue({
    el:‘#box‘,
    data:{
      a:‘aaa‘
    },
  components:{
    ‘aaa‘:{
      data(){
        return{
          msg:‘我是父组件的数据‘,
          msg1:111
        }
      },
      template:‘#aaa‘,
      components:{
        ‘bbb‘:{
          props:[‘m‘,‘myMsg‘],//props绑定自定义属性m,进行组件之间的数据传递,
且这里应该是驼峰式写法
          template:‘<h2>我是标题bbb-->{{m}}<br/>{{myMsg}}</h2>‘
        }
      }
    }
  }
});
</script>

2.父组件想获取子组件的data
*子组件把自己的数据发送到父组件
发送方法:vm.$emit(事件名称,发送的数据)
v-on:接收数据-->@事件名称="函数" (函数写到父组件methods里面,这里没有括号)

<div id="box">
  <aaa></aaa>
</div>

<template id="aaa">
  <h3>父组件-->{{msg}}</h3>
  <bbb @child-msg="get"></bbb> //**这里接收get后面不能有括号
</template>

<template id="bbb">
  <span>子组件-->{{a}}</span>
  <input type="button" value="send数据" @click="send()">
</template>

<script type="text/javascript">
  var vm = new Vue({
    el:‘#box‘,
    data:{

    },
    components:{
      ‘aaa‘:{
        data(){
          return{
            msg:‘我是父组件的数据‘,
            msg1:111222
          }
        },
        template:‘#aaa‘,
        methods:{
          get(msg){
            this.msg=msg;
          }
        },
        components:{
          ‘bbb‘:{
            data(){
              return{
                a:‘我是子组件的数据‘
              }
            },
            template:‘#bbb‘,
            methods:{
              send(){
                this.$emit(‘child-msg‘,this.a); //数据以名称child-msg发送出去
              }
            }
          }
        }
      }
    }
  });
</script>
-------------------------------------------
其他组件之间数据传递方法:
  vm.$dispatch(事件名,数据) -->子组件向父组件发送数据
  vm.$broadcast(事件名,数据) -->父级向子级广播数据
这两个需要配合event:{}使用
不推荐使用,因为在vue2.0中已经淘汰了

时间: 2024-10-25 21:41:45

Vue1.0学习总结(4)———Vue1.0自定义组件、Vue1.0组件之间的通信的相关文章

Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字

Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字 看了之前的学习笔记知道了什么是关键字,现在提示各位在Swift 2.0之后增加defer.guard.repeat.catch.rethrows.throw.throws和try关键字,其中repeat关键字替代do - while循环中的do,即中repeat - while循环.而do关键字用于错误处理.catch.rethrows.throw.throws和try是错误处理关键字. 错误处理是Swift 2.0

USB2.0学习笔记连载(六):USB2.0硬件设计需要注意事项

笔者在设计USB2.0时找到了一个官方给的硬件设计正确设计指南,其中有些内容还挺nice的.不单单只是USB的设计,其中有些思想可以应用到其他的场合中. 对于USB2.0而言,全速状态下可以达到480Mbps,带宽相比USB1.0提高了不少.USB2.0的供电大功率供电可以达到500mA,实际上加上USB自身消耗,也就是在450~480mA左右. 1.USB供电 对于外部器件的供电选择,可以使用USB进行供电,也可以自供电.关于USB集线器的介绍参看另外一篇关于USB集线器的介绍. USB进行供

Swift 2.0学习笔记(Day 7)——Swift 2.0中的print函数几种重载形式

原创文章,欢迎转载.转载请注明:关东升的博客 Swift 2.0中的print函数有4种重载形式: print(_:).输出变量或常量到控制台,并且换行. print(_:_:).输出变量或常量到指定类型的流中,并且换行. print(_:appendNewline:).输出变量或常量到控制台,appendNewline参数是布尔值,true表示换行,false表示不换行. print(_:_:appendNewline:) .输出变量或常量指定类型的流中,appendNewline参数是布尔值

Swift 2.0学习笔记(Day 15)——请注意数字类型之间的转换

原创文章,欢迎转载.转载请注明:关东升的博客 在C.Objective-C和Java等其他语言中,整型之间有两种转换方法: 从小范围数到大范围数转换是自动的: 从大范围数到小范围数需要强制类型转换,有可能造成数据精度的丢失. 而在Swift中这两种方法是行不通的,需要通过一些函数进行显式地转换,代码如下: let historyScore:UInt8 = 90 let englishScore:UInt16 = 130 let totalScore = historyScore + englis

vue1.0学习总结

前言 使用vue已经有三.四个月了,但是只是学着使用了一些基本方法.因为现在的前端框架越来越多(Angular,React...),但是我相信万变不离其宗,很多用法框架之间还是想通的,所以借总结的vue的机会深入了解vue到每个细节,以后能更加熟练地使用vue,有机会也能在别的框架中体会相通的思想. 一.基本&&重点介绍 兼容性:vue不支持IE8及以下版本,因为IE8不支持vue所使用的ECMAScript5语法 数据驱动视图:不需要操作DOM 支持双向绑定:但是默认为数据从父组件到子组

Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea

文章大纲 在xml中声明bean和注入bean 在xml中声明bean和自动注入bean 自动扫描bean和自动注入bean 对自动扫描bean增加约束条件 首次接触spring请参考 Spring 3.0 学习-环境搭建和三种形式访问 1.典型的Spring XML 配置文件表头 <?xml version="1.0" encoding="UTF-8"?><!-- 一般化的Spring XML 配置 --> <beans xmlns=

ASP.NET(0):学习asp.net比较完整的流程

如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET.           ASP.NET是一个全面向对象的技术,不懂OO,那绝对学不下去! 第二步 对.NET Framework类库有一定的了解 可以通过开发Windows Form应用程序来学习.NET Framework.          ASP.NET是建构在.NET Framework之上的技术,你对.N

vue2.0学习(二)-全局API

vue2.0学习(二)-全局API GitHub源码 https://github.com/sunnyguyan/VueDemo 1.Vue.directive自定义指令 一.什么是全局API? 全局API并不在构造器里,而是先声明全局变量或者直接在Vue上定义一些新功能,Vue内置了一些全局API,比如我们今天要学习的指令Vue.directive.说的简单些就是,在构造器外部用Vue提供给我们的API函数来定义新的功能 二.Vue.directive自定义指令 我们在第一季就学习了内部指令,

vue2.0学习(四)-实例和内置组件

vue2.0学习(四)-实例和内置组件 1.实例入门-实例属性 一.Vue和Jquery.js一起使用 下载可以去官网进行下载,我这里使用的版本是3.1.1,下载好后在需要的页面引入就可以了.当然你还有很多其它的方法引入jquery,只要可以顺利引入就可以了. <script type="text/javascript" src="../assets/js/jquery-3.1.1.min.js"></script> <!DOCTYPE