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 相关文章推荐
可以文本显示的公告栏的js代码
Mar 11 Javascript
jquery 提交值不为空的元素示例代码
May 10 Javascript
9行javascript代码获取QQ群成员具体实现
Oct 16 Javascript
JavaScript数组操作函数汇总
Aug 05 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
Oct 26 Javascript
给easyui的datebox控件添加清空按钮的实现方法
Nov 09 Javascript
关于jQuery库冲突的完美解决办法
May 20 jQuery
使用async-validator编写Form组件的方法
Jan 10 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
Aug 31 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
Apr 17 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
关于Layui Table隐藏列问题
Sep 16 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
论建造顺序的重要性
2020/03/04 星际争霸
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
百度留言本js 大家可以参考下
2009/10/13 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Apache如何部署django项目
2017/05/21 Python
Python 列表理解及使用方法
2017/10/27 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
财政专业大学生职业生涯规划书
2014/09/17 职场文书
钱学森电影观后感
2015/06/04 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL