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 方法实现返回多个数据的代码
Apr 30 Javascript
javascript call方法使用说明
Jan 11 Javascript
js将long日期格式转换为标准日期格式实现思路
Apr 07 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
Window.Open如何在同一个标签页打开
Jun 20 Javascript
jquery中radio checked问题
Mar 16 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
Dec 24 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
javascript中replace使用方法总结
Mar 01 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
Sep 16 Javascript
vue elementui tree 任意级别拖拽功能代码
Aug 31 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图像处理类代码分享
2012/01/19 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
Prototype String对象 学习
2009/07/19 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
python实现顺序表的简单代码
2018/09/28 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
几个Shell Script面试题
2012/08/31 面试题
运动会闭幕式解说词
2014/02/21 职场文书
法律进社区实施方案
2014/03/21 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
死亡诗社观后感
2015/06/05 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js