vue中的组件
一、自定义组件
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中的组件的更多相关文章
- vue中自定义组件(插件)
vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...
- Vue中父子组件执行的先后顺序
Vera Vue中父子组件执行的先后顺序探讨(转载) 前几天,朋友向我提出了一个关于Vue中父子组件执行的先后顺序问题,相信很多朋友在学习的过程中也会遇到这个问题,所以我就在此提出我自己的一些小看 ...
- Vue中父子组件执行的先后顺序探讨
前几天,朋友向我提出了一个关于Vue中父子组件执行的先后顺序问题,相信很多朋友在学习的过程中也会遇到这个问题,所以我就在此提出我自己的一些小看法. 问题如下:请问下图中父子组件执行的先后顺序? 首先, ...
- Vue中父组件向子组件传值
Vue中父组件向子组件传值 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- Vue 中的组件
VUE中的组件 一个自定义的标签,vue就会把他看成一个组件,vue可以给这些标签赋予一定意义:一个页面就是一个组件 好处: 1.提高开发效率 2.方便重复使用 3.便于协同开发 4.更容易被管理和维 ...
- Vue 中数据流组件
好久不见呀,这两年写了很多很多东西,也学到很多很多东西,没有时常分享是因为大多都是我独自思考.明年我想出去与更多的大神交流,再修筑自己构建的内容. 有时候我会想:我们遇到的问题,碰到的界限,是别人给的 ...
- 简述vue中父子组件是怎样相互传递值的(基础向)
前言 首先,你需要知道vue中父组件和子组件分别指的是什么? 父组件:vue的根实例——用new Vue()构造函数创建的vue实例(实例会有一个挂载点,挂载点里的所有内容可理解为父组件的内容) ...
- 解决vue中element组件样式修改无效
vue中element组件样式修改无效 <style> .detail{ .el-input__inner { height: 48px; } } </style> 直接写st ...
- Vue中keep-alive组件的理解
对keep-alive组件的理解 当在组件之间切换的时候,有时会想保持这些组件的状态,以避免反复重渲染导致的性能等问题,使用<keep-alive>包裹动态组件时,会缓存不活动的组件实例, ...
- vue中的组件化
组件化 1.定义全局组件 1.要在父实例中使用某个组件,组件必须在实例值之前定义2.组件其实也是一个Vue实例,因此它在定义时也会接收:data.methond.生命周期函数等3.不同的组件不会与页面 ...
随机推荐
- Python编程:从入门到实践(选记)
本文参考< Python 编程:从入门到实践>一书,作者: [ 美 ] Eric Matthes 第1章 起步 1.1 搭建python环境 在不同的操作系统中, Python 存 ...
- bzoj 2186
非常有趣的题 题意:求1~N!中有多少个与M!互质的数,T组询问,答案对R取模 题解: 首先,因为N>M,所以N!>M!,所以答案一定有一部分是φ(M!) 接下来做一些分析: 引理: 若x ...
- 通过iostat来查看linux硬盘IO性能|实例分析
iostat查看linux硬盘IO性能 rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wm ...
- Microsoft Visual Studio Community 2017 修改新建项目的默认位置
IDE: Microsoft Visual Studio Community 2017 15.5.2 通过修改默认的设置,在下一次新建项目时,就可以节省一些不必要的操作. 菜单:工具 > 选项, ...
- 使用sysbench 0.5 对mysql 进行性能、压力测试
sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.目前sysbench代码托管在launchpad上,项目地址:https://launc ...
- bootstrap-table 刷新页面数据
bom.bootstrapTable('load',msg['object']);//这一步 务必要添加. if(msg['code']==1){ bom.find('tbody').css('dis ...
- linux 搭建testlink的问题总结
testlink问题总结 1.要求环境centos7,安装php版本5.5以上(7.1.5),mysql5.6 ,5.7测试还不行(改变挺大的5.7表结构,字段啥的待研究),apache任意版本即可 ...
- 修改Linux服务器的ttl值
[root@test_android_client_download ~]# cat /etc/sysctl.conf |grep net.ipv4.ip_default_ttlnet.ipv4.ip ...
- Django主线
Django怎么学: 参考地址:https://www.zhihu.com/question/26235428 需要了解的知识点: Django Url请求流程 首要操作 Django的安装 pip3 ...
- Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误
1:Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误,是因为jar包冲突了,所以对于和hadoop的jar包冲 ...