连续几天没空写文章了,最近忙着弄一个小程序,经过几天的coding,终于在今天下午提交审核,等待审核中....

大家久等了,是时候接着学习我们的vue基础系列教程了,第一节我们就介绍过,vue有两大核心:数据驱动和组件。

传送门:《Vue框架是什么,为什么选它?》

我们在之前的章节,已经详细地介绍了vue的数据驱动,从这一节开始,我们就来学习另一个核心:组件。

(没错,又是这张图)

组件是我们人为地把页面合理地拆分成一个个区块,让这些区块更方便我们重复使用,有了组件,我们可以更高效合理地开发和维护我们的项目。

竟然说得组件那么好用,那我们就来好好学学怎么使用它。

规划组件

假设我们页面上有这样的一个布局:

(多个相同或类似的区块)

上图是我们模仿微信公众号的“历史消息”的界面,我们看到的是一个文章的目录列表,在我们公众号,则看到的是我们《Vue2.0基础》的系列文章。

这种情况下,我们把每一个文章标题区块看作一个组件来进行规划,这样就方便我们去复用这个组件:

(规划组件)

实现组件

我们学会了如何规划出一个组件,接下来,我们看看在vue中如何实现一个组件。

(这一部分看作一个组件)

我们用传统的实现方式一个组件,html代码如下:

 <div class="unit">    <div class="content">        <h1>这里是文章的标题</h1>        <div class="info">            <span>2017410</span>            <span class="original">原创</span>        </div>    </div>    <img src="cover.jpg" alt=""> </div>

忽略css(这里我们不介绍css),我们看到了上面html代码结构,class为unit的<div>容器以及它的子孙节点组成了我们的组件。在vue组件中,这些代码将作为我们组件的模板template。

什么意思?我们来看看vue如何实现一个组件的。

首先,我们还是先创建一个vue实例,很熟练了,没难度。

 <div id="app"></div> <script>    let vm = new Vue({       el:"#app",    }); </script>

成功创建了一个vue实例vm,挂载元素为id为app的div节点。

接下来,我们在创建实例vm之前,利用vue提供的API来注册一个组件。稍微修改一下上面的代码:

 <div id="app"></div> <script>    Vue.component('my-article',{       template:`<div>                <div>                <h1>这里是文章的标题</h1>                <div>                <span>2017年4月10日</span>                <span>原创</span>                </div>                </div>                <img src="cover.jpg" alt="">                </div>`    });

    let vm = new Vue({       el:"#app",    }); </script>

我们使用了vue提供的全局API   Vue.component() ,注册了一个名为:“my-article”的组件,而组件的template正好是我们上面的html代码,这样,我们就可以用 <my-article></ my-article> 的方式来使用我们的组件。

注意:一定要确保实例vm在创建之前, <my-article> 组件已经被成功注册,这也是为什么我们要把代码写在实例化之前。

既然注册了组件 <my-article> ,我们就来使用这个自定义的组件:

 <div id="app">    <my-article></my-article> </div>

我们看看渲染的结果:

(渲染效果)

我们看到最终渲染的不是标签<my-article></my-article>,而是我们组件的模板template的值。我们成功地注册一个自定义的组件并使用它。

但这并不够,我们有的文章目录中不仅仅只有一篇文章,而且每篇文章的标题和日期都不一样,我们如何动态地展示它们的数据呢?

这里就涉及到了组件的传参props,没错,不但函数可以接受参数,vue的组件也可以。接下来,我们看看怎么实现传参。

我们知道,组件中的这4部分是需要动态获取数据的:标题,发布日期,是否原创,文章封面图。

那么,我们就通过传参的方式把这些数据传到组件,实现数据动态展示。

首先,我们把数据存储在实例vm的data中:

 let vm = new Vue({   el:"#app",   data:{       article:{           title:"第一节:Vue.js框架是什么,为什么选择它?",           date:" 2017年03月06日",           is_original:true,           cover_url:"cover.jpg"       }   } });

我们给data增加了一个文章article的信息,包括:标题title,发布日期date,是否原创is_original,封面图片cover_url。

文章的信息有了,我们怎么传到组件中去呢?

 <div id="app">      <my-article :detail="article"></my-article> </div>

就像一个函数传参一样,你可以把detail理解成一个形参,article相当于实参。

我们给组件传了参,组件内部怎么接受并使用呢?我们接着看,十分简单!

我们把注册组件的代码稍微修改一下:

 Vue.component('my-article',{   props:['detail'],   template:`<div>            <div>            <h1>{{detail.title}}</h1>            <div>            <span>{{detail.date}}</span>            <span v-show="detail.is_original">原创</span>            </div>            </div>            <img :src="detail.cover_url" alt="">            </div>` });

除了template以外,我们增加了props,通过它来接受我们的参数detail,传进来之后,你可以在组件的模板template中使用它所接受的所有数据了。比如,我们传进来的数据包含着文章的信息:title,date,is_original,cover_url。

读取文章的标题:

 <h1>{{detail.title}}</h1>

读取文章的发布日期:

 <span>{{detail.date}}</span>

读取文章是否原创,并通过 v-show 指令控制显示/隐藏:

  <span v-show="detail.is_original">原创</span>

读取文章的封面图片地址:

 <img :src="detail.cover_url">

竟然读取了数据,我们就看看渲染结果:

(数据动态读取)

数据是动态读取了,那么我们的目录并不仅仅只有一篇文章,当我们数据多了之后,该用什么方式展示出来呢?

 let vm = new Vue({   el:"#app",   data:{       articles:[           {               title:"第一节:Vue.js框架是什么,为什么选择它?",               date:" 2017年03月06日",               is_original:true,               cover_url:"cover.jpg"           },           {               title:"第二节:简易安装 和 快速入门Vue.js",               date:" 2017年03月09日",               is_original:true,               cover_url:"cover.jpg"           },           {               title:"第三节:创建一个Vue实例,超简单",               date:" 2017年03月17日",               is_original:true,               cover_url:"cover.jpg"           },           {               title:"第四节:定义一个vue实例的4个常用选项",               date:" 2017年03月20日",               is_original:true,               cover_url:"cover.jpg"           },       ]   } });

假设我们的articles中有4篇文章的信息。

也许你已经相当到了,我们可以使用 v-for 指令,它是专门用于处理列表渲染的指令。结合我们的组件,一起来实现这个文章目录的效果。

非常简单,组件我们已经封装好,我们只需要给它传参即可,所以我们不需要改动组件的代码。而articles是一个数组,我们用 v-for 指令对它进行遍历即可。

我们对html代码稍微改动一下:

 <div id="app">    <my-article             v-for="item in articles"             :detail="item">    </my-article> </div>

代码很简单,我们在组件上加上了 v-for 指令,并遍历了articles。

渲染结果:

(4篇文章的信息成功地渲染出来)

本节小结

掌握如何规划设计一个组件,注册以及其注意事项,运用组件与 v-for 指令实现列表渲染。

扩展阅读

1.《ECMAScript 6 系列》原创教程

2.《实战前必须掌握的10个指令(上)》

3.《实战前必须掌握的10个指令(上)》

第九节:掌握vue的另一个核心:组件相关推荐

  1. Vue手写一个日历组件

    工作中遇到一个需求是根据日历查看某一天/某一周/某一月的睡眠报告,但是找了好多日历组件都不是很符合需求,只好自己手写一个日历组件,顺便记录一下. 先来看看设计图是什么样式, 跟其他日历有点不一样,这个 ...

  2. 用vue自己封装一个分页组件

    准备知识:全局配置组件(本文不赘述,可自行百度) 先来看下效果. 非常简单的效果.事件上仅改变页码,无其他. 1.新建文件pagination.vue.简单解释下:先写DOM结构和样式,接着是事件. ...

  3. vue如何实现一个auto-complete组件

    在这里提供种实现auto-complete组件的思路 auto-complete的效果 一.通过vue指令来实现auto-complete <template><div>< ...

  4. Vue编写的树形tree组件

    近期在进行vue的学习,自研的vue项目需要一个tree组件.由于在学习阶段,不想'拿来主义',拿别人写好的组件使用,对于处于学习阶段的开发者来说不是一件好事,虽然拿别人开发好的东西过来用可以快速进行 ...

  5. 第九节 信度、效度分析

    第九节 信度.效度分析 一.信度分析 前言 对于信度效度分析大家应该都不陌生,即使不明白真实的含义,应该也听过这两个词汇.从认知广泛度也可以知道信度.和效度分析在统计学上的重要性.虽然信效度分析很重要 ...

  6. 【java】兴唐课程第五节到第九节知识点总结

    第九节 1. 代码:void readBook(String- bookNames) 表示不确定参数的个数,此时变量为一个数组. 2.当方法中的参数名称(如stuname)和属性名称相同时. this ...

  7. animation基础练习源码_用vue简单写一个音乐播放组件「附源码」

    作者:vipbic 转发链接:https://segmentfault.com/a/1190000022980992 前言 上次小编也分享一个关于Vue 开发过音乐播放对项目: 基于 electron ...

  8. 第九节--绑定 -- Classes and Objects in PHP5 [9](转)

    /* +-------------------------------------------------------------------------------+ | = 本文为Haohappy ...

  9. 使用vue来开发一个下拉菜单组件(2)

    二.组件设计 接下来是开发选择框组件,首先需要自定义一个点击外部使下拉菜单关闭的指令: export default {bind(el, binding, vnode) {function docum ...

最新文章

  1. NLP突破性成果 BERT 模型详细解读 bert参数微调
  2. R语言随机森林回归(randomforest)模型构建
  3. js的下拉框事件之onchange
  4. 【转载】图论 500题——主要为hdu/poj/zoj
  5. 详解图示+例题演练——BF算法+KMP算法基本原理
  6. python怎么暂停爬虫_python Python爬虫防封杀方法集合
  7. MongoDB介绍与安装
  8. linux mysql跑高_linux 下如何查看mysql跑了哪些服务
  9. UCF-101视频数据分类资源
  10. Java、JSP在线问卷调查系统
  11. 微信小程序实现OCR扫描识别
  12. Win11怎么重装显卡驱动程序?Win11显卡驱动怎么卸载重装?
  13. 米家摄像头显示服务器错误,米家摄像头云服务器
  14. ppt 计算机教学操作,电脑基本操作教学(原创).ppt
  15. Android浮窗权限判断
  16. 最新苹果同步器技术-手机群控操作-脚本录制分屏控制-实时同步操作一系列APP功能解析分享
  17. 索尼电视投屏声音与画面不同步现象解决方案
  18. unity 动态字体 和 静态字体
  19. HTML表单之邮箱验证
  20. Object的wait()和notify()以及notifyAll()和interrupt()方法

热门文章

  1. c语言数组左下角便*,数据结构 - 数组
  2. python判断某年是否为闰年_python如何判断某年是否是闰年_后端开发
  3. 【数据结构与算法】链式栈的Java实现
  4. 计算数学与数学理论专栏【简介】
  5. 面试算法基础及编程 第四弹 (字符串、数值类、或其他常见相关)
  6. 在网络虚拟化之前部署NFV将使运营商网络面临风险
  7. MySQL数据库服务器搭建及基本管理
  8. Ext.form.field.CheckBox复选框和Ext.form.field.Radio单选框
  9. 毕业了去哪里工作,一位毕业多年北漂人的经验感悟
  10. winpcap的程序(转)