1、组件注册


Vue.component('name',{}) 创建的组件都是全局组件,它们在注册之后可以用在任何新创建的Vue根实例(new Vue)的模板中。第一个参数是组件的名字,第二个参数是一个方法,可以在其中定义组件的data数据、template模板、props传值、components组件注册、computed计算属性、method方法、watch监听数据变化、以及生命周期的构子函数:beforeCreate、created、beforeMount、mounted、beforeupdate、updated、beforeDestroy、destroyed。
推荐创建一个 components 目录,并将每个组件放置在其各自的文件中:
import ComponentA from './ComponentA'
import ComponentC from './ComponentC'
export default {
components: {
ComponentA,
ComponentC
}
}

2、Prop

  • 由于浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop名需要使用其等价的 kebab-case (短横线分隔命名) 命名。prop可以是任何类型的数据、变量或对象,当prop是对象时,即使对象是静态的也必须使用v-bind。不要在子组件中改变prop的数据,可以在自身的data里保存一份该prop属性


    Vue.component('user', {
    props: ['sayHello']
    })
    <user say-Hello="hello!"></user>
    我们可以传递静态Prop(如上),也可以使用v-bind传递动态Prop(如下)
    <user :title="post.title"></user>
  • prop验证(控制传入组件数据的类型)
    Vue.component('mycomponent',{


    props:{
    propZ:null, //匹配任何类型
    propA:Number, //数字类型
    propB:[Number,String], //多个可能的类型
    propC:{
    type:String,
    required:true, //必填
    default:'Hello' //默认
    },
    propD:{
    type:Object, //对象类型
    default:function(){ //默认函数
    return {
    msg:'hello'
    }
    }
    },
    propE:{
    //自定义验证
    validator: function (value) {
    // 这个值必须匹配下列字符串中的一个
    return ['success', 'warning', 'danger'].indexOf(value) !== -1
    }
    },
    user:Person
    }

    })

3、自定义事件


1、事件名建议始终使用短横线连接的方式如:my-event
2、自定义组件的 v-model:
Vue.component('base-checkbox', {
model: {
prop: 'checked',
event: 'change'
},
props: {
checked: Boolean
},
template: `
<input
type="checkbox"
v-bind:checked="checked"
v-on:change="$emit('change', $event.target.checked)"
>
`
})
<base-checkbox v-model="lovingVue"></base-checkbox>

4、插槽<slot>


1、组件:&lt;base-layout&gt;:
&lt;div class="container"&gt;
&lt;header&gt;
&lt;slot name="header"&gt;&lt;/slot&gt;
&lt;/header&gt;
&lt;main&gt;
&lt;slot&gt;&lt;/slot&gt;
&lt;/main&gt;
&lt;footer&gt;
&lt;slot name='footer'&gt;&lt;/slot&gt;
&lt;/footer&gt;
&lt;slot name="footer"&gt;&lt;/slot&gt;
&lt;/div&gt; &lt;base-layout&gt;
&lt;template slot='header'&gt;
&lt;h3&gt;我是Header&lt;/h3&gt;
&lt;/template&gt;
&lt;p&gt;我没有名字&lt;/p&gt;
&lt;p&gt;显示在默认插槽&lt;/p&gt;
&lt;h3 slot='footer'&gt;具名插槽2&lt;/h3&gt;
&lt;/base-layout&gt;
结果:
&lt;div class="container"&gt;
&lt;header&gt;
&lt;h3&gt;我是Header&lt;/h3&gt;
&lt;/header&gt;
&lt;main&gt;
&lt;p&gt;我没有名字&lt;/p&gt;
&lt;p&gt;显示在默认插槽&lt;/p&gt;
&lt;/main&gt;
&lt;footer&gt;
&lt;h3&gt;具名插槽2&lt;/h3&gt;
&lt;/footer&gt;
&lt;/div&gt;

5、动态组件与异步组件


&lt;!-- 失活的组件将会被缓存!--&gt;
&lt;keep-alive&gt; //&lt;keep-alive&gt;缓存组件切换状态,组件必须有名字
&lt;component v-bind:is="currentTabComponent"&gt;&lt;/component&gt; //is 特性来切换不同的组件
&lt;/keep-alive&gt;

来源:https://segmentfault.com/a/1190000016354966

深入了解Vue.js组件笔记的更多相关文章

  1. Vue.js 组件笔记

    Vue 组件总结笔记 一. 创建组件 1. 使用组件三部曲 ( 创建, 注册, 使用 ) 2. 全局组件:Vue.component('tag', {}); 3. 局部组件: components 属 ...

  2. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  3. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  4. 如何理解vue.js组件的作用域是独立的

    vue.js组件的作用域是独立,可以从以下三个方面理解: 1.父组件模板在父组件作用域内编译,父组件模板的数据用父组件内data数据:2.子组件模板在子组件作用域内编译,子组件模板的数据用子组件内da ...

  5. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

  6. Vue.js 学习笔记 一

    本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! https://github.com/zwl-jasmine95/Vue_test 以下所有知 ...

  7. Vue.js 学习笔记 第2章 数据绑定和第一个Vue应用

    本篇目录: 2.1 Vue实例与数据绑定 2.2 指令与事件 2.3 语法糖 学习任何一种框架,从一个Hello World应用开始是最快了解该框架特性的途径. 我们先从一段简单的HTML代码开始,感 ...

  8. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

  9. 浅尝Vue.js组件(一)

    本篇目录: 组件名 组件注册 全局注册 基础组件的自动化全局注册 局部注册 在模块系统中局部注册 Prop 单向数据流 Prop验证 类型检查 非Prop特性 替换/合并已有的特性 禁用特性继承 自定 ...

随机推荐

  1. .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用

    环境:之前一直是使用serverStack.Redis的客服端,今天来使用一下StackExchange.Redis(个人感觉更加的人性化一些,也是免费的,性能也不会差太多),版本为StackExch ...

  2. Trie详解

    Trie,又名字典树.单词查找树,可以较高效地实现统计.排序和保存大量的字符串. 顾名思义,Trie是一个树状的结构,按照树型结构来存储字符串,显然是一种以空间换时间的方法.整体上理解和实现都不会很难 ...

  3. Java通过反射加载的类,变量无法注入

    //之前都是直接newInstance的到obj,类中的变量无法被注入//Object obj = aClass.newInstance(); //改成如下方式的到bean,变量就能顺利被注入 ,其他 ...

  4. 《MySQL数据库》MySQL备份恢复

    前言 MySQL数据库最重要的部分就是数据,所以保证数据不被损坏尤为重要,大家都知道911事件,当时非常多的数据丢失,导致经济混乱.接下来我们就来讲讲MySQL是如何保障数据完整,应对特殊情况,如何恢 ...

  5. MySQL常用指令,java,php程序员,数据库工程师必备。程序员小冰常用资料整理

    MySQL常用指令,java,php程序员,数据库工程师必备.程序员小冰常用资料整理 MySQL常用指令(备查) 最常用的显示命令: 1.显示数据库列表. show databases; 2.显示库中 ...

  6. 启用和禁用warning

    #pragma warning 启用和禁用warning https://www.cnblogs.com/Free-Thinker/p/5897678.html

  7. Auto Generate Reflection Information for C++

    https://www.reddit.com/r/gamedev/comments/3lh0ba/using_clang_to_generate_c_reflection_data/ https:// ...

  8. 初学WebGL引擎-BabylonJS:第8篇-阴影网格与活动

    [playground]-shadows(阴影) 源码 var createScene = function () { var scene = new BABYLON.Scene(engine); / ...

  9. VMware中卸载安装Ubuntu系统 ——Ubuntu系统配置(一)

    由于之前配置给Ubuntu的磁盘空间不足,进行了扩展磁盘空间,结果Ubuntu无法开机了,试了很多种办法都没成功,也有些后悔没有记录下配置过程,于是决定卸载Ubuntu进行重新安装和配置. 一.VMw ...

  10. 08_Python的数据类型

    1.数字(整型int 浮点型float 复数complex) 1.数字概述 不可变类型,一旦创建不可修改,不是迭代对象,属于原子型 2.整型数int 概述: 整型数是不带有小数部分的数字,包括自然数, ...