一、自定义组件
1、组件命名
   A、dom模板
在HTML模板中始终使用kebab-case命名组件

  1. <kebab-cased-component> </kebab-cased-component>

B、字符串模板
比如script标签模板、js内联模板、.vue组件,可以使用kebab-case(短横线分隔命名)、camelCase(驼峰式命名)或PascalCase(单词首字母大写命名)。

2、组件通信
prop是单向绑定的,父组件的属性变化时,会使用prop给子组件传数据,反过来不会,这样可以避免子组件修改父组件的状态,而子组件通过自定义事件系统和父组件通信。简言之,父组件通过prop给子组件发数据,子组件通过事件给父组件发消息。

兄弟组件通信,新建空的vue实例,用$emit()和$on()实现,复杂的情况可以用状态管理模式vuex。
   A、全局注册

  1. <div id="J_app">
  2. <ol>
  3. <my-tasks
  4. v-for="item in tasks"
  5. v-bind:todo="item"
  6. v-bind:key="item.id">
  7. </my-tasks>
  8. </ol>
  9. </div>
  10. Vue.component('my-tasks', {
  11. props: ['todo'],
  12. template: '<li>{{ todo.text }}</li>'
  13. })
  14. var vapp = new Vue({
  15. el: '#J_app',
  16. data: {
  17. tasks: [
  18. { id: 0, text: '学习webpack' },
  19. { id: 1, text: '学习postcss' },
  20. { id: 2, text: '学习vuejs' }
  21. ]
  22. }
  23. })

B、局部注册

  1. <div id="J_app">
  2. <ol>
  3. <my-tasks
  4. v-for="item in tasks"
  5. v-bind:todo="item"
  6. v-bind:key="item.id">
  7. </my-tasks>
  8. </ol>
  9. </div>
  10. var Child ={
  11. props: ['todo'],
  12. template: '<li>{{ todo.text }}</li>'
  13. }
  14.  
  15. var vapp = new Vue({
  16. el: '#J_app',
  17. data: {
  18. tasks: [
  19. { id: 0, text: '学习webpack' },
  20. { id: 1, text: '学习postcss' },
  21. { id: 2, text: '学习vuejs' }
  22. ]
  23. },
  24. components:{
  25. 'my-tasks': Child
  26. }
  27. })
  1. //父组件传值给子组件
  2. <my-tasks v-bind:子组件的值="父组件的数据"></my-tasks>

3、data选项
构造Vue实例时传入的各种选项大多数都可以在组件里使用,只有data例外,data必须是函数。

  1. <div id="J_app">
  2. <simple-counter></simple-counter>
  3. <simple-counter></simple-counter>
  4. <simple-counter></simple-counter>
  5. </div>
  6. Vue.component('simple-counter', {
  7. template: '<button v-on:click="counter += 1">{{ counter }}</button>',
  8. data: function () {
  9. return {
  10. counter: 0
  11. }
  12. }
  13. })
  14. var vapp = new Vue({
  15. el: '#J_app'
  16. })

4、组件作用域
父组件模板的内容在父组件作用域内编译,子组件模板的内容在子组件作用域内编译。
5、如果组件中包含大量静态内容,可以用v-once指令缓存渲染结果。

  1. Vue.component('terms-of-service', {
  2. template: '\
  3. <div v-once>\
  4. <h1>Terms of Service</h1>\
  5. ...很多静态内容...\
  6. </div>\
  7. '
  8. })

6、单文件组件

二、自定义事件
每个Vue实例都实现了事件接口,使用$on(eventName)监听事件,使用$emit(eventName)触发事件。

  1. <div id="J_app">
  2. <p>{{ total }}</p>
  3. <button-counter v-on:increment="incrementTotal"></button-counter>
  4. <button-counter v-on:increment="incrementTotal"></button-counter>
  5. </div>
  6.  
  7. Vue.component('button-counter', {
  8. template: '<button v-on:click="incrementCounter">{{ counter }}</button>',
  9. data: function () {
  10. return {
  11. counter: 0
  12. }
  13. },
  14. methods: {
  15. incrementCounter: function () {
  16. this.counter += 1
  17. this.$emit('increment')
  18. }
  19. }
  20. })
  21. var vapp = new Vue({
  22. el: '#J_app',
  23. data: {
  24. total: 0
  25. },
  26. methods: {
  27. incrementTotal: function () {
  28. this.total += 1
  29. }
  30. }
  31. })

三、vue内置组件
1、列表过渡组件

  1. .each-item {
  2. display: inline-block;
  3. margin-right: 10px;
  4. }
  5. .list-enter-active, .list-leave-active {
  6. transition: all 1s;
  7. }
  8. .list-enter, .list-leave-to
  9. /* .list-leave-active for below version 2.1.8 */ {
  10. opacity: 0;
  11. transform: translateY(30px);
  12. }
  13. <div id="J_transition_component">
  14. <button v-on:click="add">Add</button>
  15. <button v-on:click="remove">Remove</button>
  16. <transition-group name="list" tag="p">
  17. <span v-for="item in items" v-bind:key="item" class="each-item">
  18. {{ item }}
  19. </span>
  20. </transition-group>
  21. </div>
  22.  
  23. var vcompapp = new Vue({
  24. el: '#J_transition_component',
  25. data: {
  26. items: [1,2,3,4,5,6,7,8,9],
  27. nextNum: 10
  28. },
  29. methods: {
  30. randomIndex: function () {
  31. return Math.floor(Math.random() * this.items.length)
  32. },
  33. add: function () {
  34. this.items.splice(this.randomIndex(), 0, this.nextNum++)
  35. },
  36. remove: function () {
  37. this.items.splice(this.randomIndex(), 1)
  38. }
  39. }
  40. })

四、UI组件

1、综合

http://www.wheelsfactory.cn/#/home?filter=vue
https://github.com/vuejs/awesome-vue#components--libraries

2、PC端
A、eleme
http://element.eleme.io/#/zh-CN
https://github.com/ElemeFE/element

B、iview
https://www.iviewui.com/
https://github.com/iview/iview

3、移动端
A、weex
http://weex-project.io/cn/guide/
https://github.com/alibaba/weex

B、vux
https://vux.li/demos/v2/?x-page=v2-doc-home#/
https://github.com/airyland/vux

C、eleme
http://mint-ui.github.io/
https://github.com/ElemeFE/mint-ui

vue中的组件的更多相关文章

  1. vue中自定义组件(插件)

    vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...

  2. Vue中父子组件执行的先后顺序

    Vera   Vue中父子组件执行的先后顺序探讨(转载) 前几天,朋友向我提出了一个关于Vue中父子组件执行的先后顺序问题,相信很多朋友在学习的过程中也会遇到这个问题,所以我就在此提出我自己的一些小看 ...

  3. Vue中父子组件执行的先后顺序探讨

    前几天,朋友向我提出了一个关于Vue中父子组件执行的先后顺序问题,相信很多朋友在学习的过程中也会遇到这个问题,所以我就在此提出我自己的一些小看法. 问题如下:请问下图中父子组件执行的先后顺序? 首先, ...

  4. Vue中父组件向子组件传值

    Vue中父组件向子组件传值 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  5. Vue 中的组件

    VUE中的组件 一个自定义的标签,vue就会把他看成一个组件,vue可以给这些标签赋予一定意义:一个页面就是一个组件 好处: 1.提高开发效率 2.方便重复使用 3.便于协同开发 4.更容易被管理和维 ...

  6. Vue 中数据流组件

    好久不见呀,这两年写了很多很多东西,也学到很多很多东西,没有时常分享是因为大多都是我独自思考.明年我想出去与更多的大神交流,再修筑自己构建的内容. 有时候我会想:我们遇到的问题,碰到的界限,是别人给的 ...

  7. 简述vue中父子组件是怎样相互传递值的(基础向)

    前言 首先,你需要知道vue中父组件和子组件分别指的是什么?   父组件:vue的根实例——用new Vue()构造函数创建的vue实例(实例会有一个挂载点,挂载点里的所有内容可理解为父组件的内容) ...

  8. 解决vue中element组件样式修改无效

    vue中element组件样式修改无效 <style> .detail{ .el-input__inner { height: 48px; } } </style> 直接写st ...

  9. Vue中keep-alive组件的理解

    对keep-alive组件的理解 当在组件之间切换的时候,有时会想保持这些组件的状态,以避免反复重渲染导致的性能等问题,使用<keep-alive>包裹动态组件时,会缓存不活动的组件实例, ...

  10. vue中的组件化

    组件化 1.定义全局组件 1.要在父实例中使用某个组件,组件必须在实例值之前定义2.组件其实也是一个Vue实例,因此它在定义时也会接收:data.methond.生命周期函数等3.不同的组件不会与页面 ...

随机推荐

  1. Python编程:从入门到实践(选记)

    本文参考< Python 编程:从入门到实践>一书,作者: [ 美 ] Eric Matthes 第1章 起步 1.1     搭建python环境 在不同的操作系统中, Python 存 ...

  2. bzoj 2186

    非常有趣的题 题意:求1~N!中有多少个与M!互质的数,T组询问,答案对R取模 题解: 首先,因为N>M,所以N!>M!,所以答案一定有一部分是φ(M!) 接下来做一些分析: 引理: 若x ...

  3. 通过iostat来查看linux硬盘IO性能|实例分析

    iostat查看linux硬盘IO性能 rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wm ...

  4. Microsoft Visual Studio Community 2017 修改新建项目的默认位置

    IDE: Microsoft Visual Studio Community 2017 15.5.2 通过修改默认的设置,在下一次新建项目时,就可以节省一些不必要的操作. 菜单:工具 > 选项, ...

  5. 使用sysbench 0.5 对mysql 进行性能、压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.目前sysbench代码托管在launchpad上,项目地址:https://launc ...

  6. bootstrap-table 刷新页面数据

    bom.bootstrapTable('load',msg['object']);//这一步 务必要添加. if(msg['code']==1){ bom.find('tbody').css('dis ...

  7. linux 搭建testlink的问题总结

    testlink问题总结 1.要求环境centos7,安装php版本5.5以上(7.1.5),mysql5.6 ,5.7测试还不行(改变挺大的5.7表结构,字段啥的待研究),apache任意版本即可 ...

  8. 修改Linux服务器的ttl值

    [root@test_android_client_download ~]# cat /etc/sysctl.conf |grep net.ipv4.ip_default_ttlnet.ipv4.ip ...

  9. Django主线

    Django怎么学: 参考地址:https://www.zhihu.com/question/26235428 需要了解的知识点: Django Url请求流程 首要操作 Django的安装 pip3 ...

  10. Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误

    1:Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误,是因为jar包冲突了,所以对于和hadoop的jar包冲 ...