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 相关文章推荐
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
Nov 25 Javascript
JavaScript事件处理的方式(三种)
Apr 26 Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 Javascript
jQuery ajax实现省市县三级联动
Mar 07 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
Mar 17 Javascript
详解基于webpack搭建react运行环境
Jun 01 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
vue中appear的用法
Aug 17 Javascript
JavaScript正则表达式和级联效果
Sep 14 Javascript
关于laydate.js加载laydate.css路径错误问题解决
Dec 27 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
Jun 27 Javascript
js回调函数仿360开机
Dec 26 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
python 多线程串行和并行的实例
2019/02/22 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
python3排序的实例方法
2020/10/20 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
AJax面试题
2014/11/25 面试题
shell变量的作用空间是什么
2013/08/17 面试题
研讨会主持词
2014/04/02 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书