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

<kebab-cased-component>  </kebab-cased-component>

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

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

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

<div id="J_app">
<ol>
<my-tasks
v-for="item in tasks"
v-bind:todo="item"
v-bind:key="item.id">
</my-tasks>
</ol>
</div>
Vue.component('my-tasks', {
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})
var vapp = new Vue({
el: '#J_app',
data: {
tasks: [
{ id: 0, text: '学习webpack' },
{ id: 1, text: '学习postcss' },
{ id: 2, text: '学习vuejs' }
]
}
})

B、局部注册

<div id="J_app">
<ol>
<my-tasks
v-for="item in tasks"
v-bind:todo="item"
v-bind:key="item.id">
</my-tasks>
</ol>
</div>
var Child ={
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
} var vapp = new Vue({
el: '#J_app',
data: {
tasks: [
{ id: 0, text: '学习webpack' },
{ id: 1, text: '学习postcss' },
{ id: 2, text: '学习vuejs' }
]
},
components:{
'my-tasks': Child
}
})
//父组件传值给子组件
<my-tasks v-bind:子组件的值="父组件的数据"></my-tasks>

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

<div id="J_app">
<simple-counter></simple-counter>
<simple-counter></simple-counter>
<simple-counter></simple-counter>
</div>
Vue.component('simple-counter', {
template: '<button v-on:click="counter += 1">{{ counter }}</button>',
data: function () {
return {
counter: 0
}
}
})
var vapp = new Vue({
el: '#J_app'
})

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

Vue.component('terms-of-service', {
template: '\
<div v-once>\
<h1>Terms of Service</h1>\
...很多静态内容...\
</div>\
'
})

6、单文件组件

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

<div id="J_app">
<p>{{ total }}</p>
<button-counter v-on:increment="incrementTotal"></button-counter>
<button-counter v-on:increment="incrementTotal"></button-counter>
</div> Vue.component('button-counter', {
template: '<button v-on:click="incrementCounter">{{ counter }}</button>',
data: function () {
return {
counter: 0
}
},
methods: {
incrementCounter: function () {
this.counter += 1
this.$emit('increment')
}
}
})
var vapp = new Vue({
el: '#J_app',
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
})

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

.each-item {
display: inline-block;
margin-right: 10px;
}
.list-enter-active, .list-leave-active {
transition: all 1s;
}
.list-enter, .list-leave-to
/* .list-leave-active for below version 2.1.8 */ {
opacity: 0;
transform: translateY(30px);
}
<div id="J_transition_component">
<button v-on:click="add">Add</button>
<button v-on:click="remove">Remove</button>
<transition-group name="list" tag="p">
<span v-for="item in items" v-bind:key="item" class="each-item">
{{ item }}
</span>
</transition-group>
</div> var vcompapp = new Vue({
el: '#J_transition_component',
data: {
items: [1,2,3,4,5,6,7,8,9],
nextNum: 10
},
methods: {
randomIndex: function () {
return Math.floor(Math.random() * this.items.length)
},
add: function () {
this.items.splice(this.randomIndex(), 0, this.nextNum++)
},
remove: function () {
this.items.splice(this.randomIndex(), 1)
}
}
})

四、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. 1283: 骨牌铺方格(zzuli)

    Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图: Input ...

  2. LeetCode(69):x 的平方根

    Easy! 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...

  3. hdu4370 dijkstra矩阵转单向边最短路矩阵+自环闭环

    /* 矩阵太神奇了Orz,网上的题解大多是spfa,不过我发想dijkstra也能做 把n*n的矩阵看成是单向边距离矩阵就行 */ #include<iostream> #include& ...

  4. jenkins+git+maven 增量部署思路以及相关脚本

    之前通过jenkins+Git+maven这种方式打war包然后scp到测试环境使用,但是现在项目组要求打增量包,即只部署修改的文件和配置文件. 核心问题:如何获取到变动的文件??? 前置条件:初始化 ...

  5. 区分TCP包的顺序

    确认TCP包的顺序: 使用抓包工具抓包之后,通常按照时间先后排序的,而不是数据的内容逻辑先后.查找内容的先后的关键在于查看TCP中的Sequence number和Acknowledgment num ...

  6. Py学生信息管理系统 案例(优化版)

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  7. 一脸懵逼学习HBase---基于HDFS实现的。(Hadoop的数据库,分布式的,大数据量的,随机的,实时的,非关系型数据库)

    1:HBase官网网址:http://hbase.apache.org/ 2:HBase表结构:建表时,不需要指定表中的字段,只需要指定若干个列族,插入数据时,列族中可以存储任意多个列(即KEY-VA ...

  8. webpack学习笔记--其它配置项

     其它配置项 除了前面介绍到的配置项外,Webpack 还提供了一些零散的配置项.下面来介绍它们中常用的部分. Target JavaScript 的应用场景越来越多,从浏览器到 Node.js,这些 ...

  9. bzoj2683&&bzoj4066

    题解: 前一题不是强制在线,后一题是强制在线 树套树空间会炸 说一下cdq分治+树状数组 首先我们利用cdq分治使得查询和操作保证先后关系 然后矩阵查询变成4个矩阵的差 那么我们就可以运用扫描线的方法 ...

  10. json 解析代码 全语言

    Javascript: 1.使用eval var parse_json_by_eval = function(str){ return eval('('+str+')'); } var value = ...