Vue单文件组件开发实现过程详解


Posted in Javascript onJuly 30, 2020

第一步:配置环境

安装cnpm

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

安装@vue/cli

cnpm install -g @vue/cli

检查版本是否正确

vue --version

Vue单文件组件开发实现过程详解

使用vue.server和vue.build对*.vue文件进行快速原型开发,需要安装vue serve

cnpm install -g @vue/cli-service-global

新建一个App.vue文件测试安装是否成功:

<template>2 <h1>Hello world!</h1>3 </template>

在该文件当前路径运行:

vue serve App.vue

打开浏览器输入localhost:8080看到如下画面则运行成功

Vue单文件组件开发实现过程详解

环境安装到此结束,接下来用一个简单案例来学习vue的单文件组件开发。

第二步:简单案例实战

以一个物品清单为例:

Vue单文件组件开发实现过程详解

该案例由4个组件构成,分别是:

1. addItem.vue 添加物品

2. item.vue 物品实例

3. items.vue 物品列表

4. changeTitle 改变标题

首先,创建一个项目demo:

vue create demo

项目默认目录如下,启动主页在public, vue源码(包括组件)都存放到src

Vue单文件组件开发实现过程详解

然后分别编写各组件代码

1. addItem.vue:

<template>
  <div class="input-group">
    <input type="text" class="form-control" placeholder="add shopping list item" v-model="newItem">
    <span class="input-group-btn">
      <button class="btn btn-primary" @click="emitAdd">
        <i class="fa fa-plus-square-o fa-lg"> </i><span>Add</span>
      </button>
    </span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      newItem: ''
    }
  },
  methods: {
    emitAdd() {
      this.$emit('addItem', this.newItem);
    }
  }
}
</script>

<style>
</style>

2. item.vue:

<template>
  <li :class="{'removed': item.checked}" class="list-group-item">
    <div class="checkbox">
      <label>
        <input type="checkbox" v-model="item.checked">
        <span>{{ item.text }}</span>
      </label>
    </div>
  </li>
</template>

<script>
export default {
  props: ['item']
}
</script>

<style>
.removed {
  color: gray;
}

.removed span {
  text-decoration: line-through;
}
</style>

3. items.vue:

<script>
import item from './item'

export default {
  props: ['items'],
  components: {
    item
  }
}
</script>

<template>
  <ul class="list-group">
    <item v-for="item in items" :key="item.id" :item="item"></item>
  </ul>
</template>

<style>
</style>

4. changeTitle.vue:

<template>
  <div>
    <em>Change the title here:</em>
    <input type="text" :value="title" @input="onInput">
  </div>
</template>

<script>
export default {
  props: ['title'],
  methods: {
    onInput(event) {
      this.$emit('input', event.target.value);
    }
  }
}
</script>

最后修改App.vue,导入上面的组件:

<template>
  <div id="app" class="container">
    <h1>{{ title }}</h1>
    <add-item @addItem="add"></add-item><br>
    <items :items="items"></items>
    <div class="footer">
      <hr>
      <change-title :title="title" v-model="title"></change-title>
    </div>
  </div>
</template>

<script>
import addItem from './components/addItem'
import items from './components/items'
import changeTitle from './components/changeTitle'

export default {
  name: 'app',
  components: {
    addItem,
    items,
    changeTitle
  },
  data() {
    return {
      items: [
        {id: 1, text: 'Bananas', checked: true},
        {id: 2, text: 'Apples', checked: false}
      ],
      title: 'My Items List'
    }
  },
  methods: {
    add(text) {
      this.items.push({
        text: text,
        checked: false
      });
    }
  }
}
</script>

<style>
</style>

需要注意的是:每个组件必须只有一个根元素。我这里需要在public/index.html引入bootstrap样式和font-awesome图标字体。

运行程序:

cnpm run serve

最后附上运行截图:

Vue单文件组件开发实现过程详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实战之仿淘宝商城左侧导航效果
Apr 12 Javascript
JavaScript数据类型详解
Apr 01 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 Javascript
基于javascript中的typeof和类型判断(详解)
Oct 27 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
JS加密插件CryptoJS实现AES加密操作示例
Aug 16 Javascript
使用Node.js实现一个多人游戏服务器引擎
Mar 13 Javascript
vue移动端模态框(可传参)的实现
Nov 20 Javascript
微信小程序后端实现授权登录
Feb 24 Javascript
详谈vue中router-link和传统a链接的区别
Jul 22 Javascript
JavaScript前端开发时数值运算的小技巧
Jul 28 Javascript
Vue通过懒加载提升页面响应速度
May 10 Vue.js
vue实现从外部修改组件内部的变量的值
Jul 30 #Javascript
在vue中实现嵌套页面(iframe)
Jul 30 #Javascript
Vue文本模糊匹配功能如何实现
Jul 30 #Javascript
VUE 单页面使用 echart 窗口变化时的用法
Jul 30 #Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
Jul 30 #Javascript
Vue Render函数原理及代码实例解析
Jul 30 #Javascript
vue - props 声明数组和对象操作
Jul 30 #Javascript
You might like
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
php提取微信账单的有效信息
2018/10/01 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
javascript 闭包
2011/09/15 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Django缓存系统实现过程解析
2019/08/02 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
机关节能减排实施方案
2014/03/17 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python