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 相关文章推荐
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
javascript中typeof的使用示例
Dec 19 Javascript
JQuery动画与特效实例分析
Feb 02 Javascript
javaScript实现可缩放的显示区效果代码
Oct 26 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
AngularJS中的按需加载ocLazyLoad示例
Jan 11 Javascript
node.js实现的装饰者模式示例
Sep 06 Javascript
JS+Canvas绘制动态时钟效果
Nov 10 Javascript
微信小程序左右滑动的实现代码
Dec 15 Javascript
详解Vue 全局变量,局部变量
Apr 17 Javascript
vue渲染方式render和template的区别
Jun 05 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
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
wxPython实现画图板
2020/08/27 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
python默认参数调用方法解析
2020/02/09 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
表演方阵解说词
2014/02/08 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
社区助残日活动总结
2014/08/29 职场文书
深入浅析React中diff算法
2021/05/19 Javascript