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的获取mouse坐标插件的实现代码
Apr 01 Javascript
iframe窗口高度自适应的实现方法
Jan 08 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
Sep 01 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
Dec 03 Javascript
js本地图片预览实现代码
Oct 09 Javascript
javascript中Number的方法小结
Nov 21 Javascript
jQuery UI插件实现百度提词器效果
Nov 21 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
Apr 20 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
Aug 31 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
Dec 23 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
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将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
php 获取本地IP代码
2013/06/23 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
Python管理Windows服务小脚本
2018/03/12 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
python版本五子棋的实现代码
2018/12/11 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Python sys模块常用方法解析
2020/02/20 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
以下的初始化有什么区别
2013/12/16 面试题
家长对小学生的评语
2014/01/28 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
公司晚会主持词
2019/04/17 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书