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 相关文章推荐
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
不要使用jQuery触发原生事件的方法
Mar 03 Javascript
button没写type=button会导致点击时提交
Mar 06 Javascript
关于JS数组追加数组采用push.apply的问题
Jun 09 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
Jun 10 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
Apr 28 Javascript
SVG实现时钟效果
Jul 17 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 Javascript
vue实现下拉菜单树
Oct 22 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提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
javascript数组排序汇总
2015/07/07 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
在Linux下调试Python代码的各种方法
2015/04/17 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
python中setuptools的作用是什么
2020/06/19 Python
python如何支持并发方法详解
2020/07/25 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
互联网创业计划书的书写步骤
2014/01/28 职场文书
参观考察邀请函范文
2014/01/29 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
运动会加油稿100字
2014/09/19 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技