vue组件实例解析


Posted in Javascript onJanuary 10, 2017

实现此例您可以学到:

  • vue-cli的基本应用
  • 父组件如何向子组件传递值
  • 单文件组件如何引入scss
  • v-on和v-for的基础应用
  • 源码下载

一、搭建vue开发环境

1)更换镜像到cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

2)安装vue-cli

cnpm install -g vue-cli

3)初始化vue项目

命令模式进入项目所在的目录,如d:\test\,输入vue init 项目名称即可。如果你想引入vue2.0框架,必须把nodejs、webpack和npm升级到最新版本。

4)node-sass和sass-loader实现scss的编译

用cnpm安装node-sass和sass-loader,用于编译scss相关内容。

5)通过npm install 安装开发和运行依赖组件

进入刚创建好的目录,执行cnpm install安装所有的开发和运行依赖项

6)通过npm run dev支持调试版本

在安装成功后,直接运行npm run dev即可看到demo的运行界面。

注意:

1.按照上述步骤搭建最终可以创建好vue项目,但也遇到几个坑

2.安装的nodejs和webpack、npm不是最新版本

二、实现Tag组件

学习一个新框架,首先是看文档,最重要还是实践。写一个hello world过于简单,要玩就玩个大的。我们就来实现一个Tag(标签)组件领悟一下vue的强大。

组件需求

  1. 将用户输入的标签信息动态的添加到标签列表区域。
  2. 同名和空标签不能输入。
  3. 外部可以控制标签显示区域的宽度。

实现思路

  1. 一个输入框,用于接受标签内容的输入;
  2. 一个列表,用于展示所有输入的标签信息;
  3. 提供一个可设置属性,用于设置标签列表的宽度;

具体实现

1. 模板内容代码

<template>
 <div class="tag-wrap">
 <span>标签:</span>
 <input type="text" id="tag" name="tag" v-model="val" />
 <button id="apply" v-on:click="add" >添加</button>
 <ul class="tag-cont clear" v-bind:style="{width: width}">
 <li v-for="item in cont">{{item}}</li>
 </ul>
 </div>
</template>

1.1 template只是模板语言的标记,解析后不会生成到页面,所以内容需要用一个div包裹住;

1.2 template中可以访问Js代码中data()和Methods、props等相关属性;

1.3 props用于父组件向子组件传递值,此值可以动态传递;

1.4 v-on绑定事件,v-for用于迭代集合。

2. Js代码

<script>
 export default{
 name: 'tag',
 data () {
 return {
 cont: [],
 val: ''
 }
 },
 methods: {
 add: function () {
 let _val = this.val
 if (_val.length === 0 || this.cont.indexOf(_val) > -1) {
 return
 }
 this.cont.push(this.val)
 }
 },
 props: {
 width: {
 type: String,
 default: 'auto'
 }
 }
 }
</script>

2.1 使用v-model="val"实现输入自动更新val这个属性;

2.2 add方法获取val这个属性的值,然后判断是否为空,以及是否在已添加标签数据中存储,如果不存在则添加到标签数组中。

2.3 props的width类型和默认值,限制类型为String,默认值为auto。

3. Scss代码

<style lang='scss' scoped >
 @keyframes item-show{
 from{ opacity: 0; }
 }
 .clear{ 
 zoom: 1;
 }
 .clear:after{
 content: '';
 display: block;
 width: 0px;
 height: 0px;
 overflow: hidden;
 clear: both;
 }

 $back-color:#fed; 
 span{
 background: $back-color;
 }
 .tag-cont{
 list-style: none;
 margin: 10px auto;
 padding: 5px;
 border: 1px solid lightblue;
 }
 .tag-cont > li{
 float: left;
 padding: 5px;
 border:1px solid gray;
 border-radius: 10px;
 animation: item-show 1s;
 margin: 10px;
 } 
</style>

3.1 用lang来标记style标签内的Css实现

4. 在App.vue中引入Tag组件,并组件到Vue的Components(组件库)中,然后在template中以标签的形式引用即可,代码如下:

<template>
 <div id="app"> 
 <tag width="300px"></tag>
 </div>
</template>
<script>
import Tag from './components/Tag'
export default {
 name: 'app',
 components: {
 Tag
 }
}
</script>

5. 效果图

vue组件实例解析

学习总结

Tag组件其实是一个很小的组件,业务价值很低,主要用于Vue新手入门。主要实现Vue常用的父组件改变子组件的值,view改变model,model的变化反应到view上,事件的绑定等功能。

还需要继承深入了解,以及vuex管理vue组件的应用,还有组件之间的通信。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
一个js实现的所谓的滑动门
May 23 Javascript
javascript数组的扩展实现代码集合
Jun 01 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
Aug 27 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
前端js文件合并的三种方式推荐
May 19 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
Jun 24 Javascript
微信小程序 数据封装,参数传值等经验分享
Jan 09 Javascript
js获取元素下的第一级子元素的方法(推荐)
Mar 05 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
使用svg实现动态时钟效果
Jul 17 Javascript
vue中使用[provide/inject]实现页面reload的方法
Sep 30 Javascript
js中实现继承的五种方法
Jan 25 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 #Javascript
React实现点击删除列表中对应项
Jan 10 #Javascript
微信小程序 radio单选框组件详解及实例代码
Jan 10 #Javascript
微信小程序 slider 详解及实例代码
Jan 10 #Javascript
微信小程序 switch组件详解及简单实例
Jan 10 #Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 #Javascript
微信小程序 picker-view 组件详解及简单实例
Jan 10 #Javascript
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php实现简单洗牌算法
2013/06/18 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
Django REST framework 视图和路由详解
2019/07/19 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
numpy实现RNN原理实现
2021/03/02 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
研究生自荐信
2013/10/09 职场文书
四个太阳教学反思
2014/02/01 职场文书
银行批评与自我批评
2014/02/10 职场文书
公司证明怎么写
2014/09/22 职场文书
护士自荐信怎么写
2015/03/06 职场文书
植树节新闻稿
2015/07/17 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
检讨书范文
2019/04/16 职场文书
2019新员工心得体会
2019/06/25 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL