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 相关文章推荐
封装的原生javascript弹出层代码
Sep 24 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
Jun 27 Javascript
js实现两个值相加alert出来精确到指定位
Sep 25 Javascript
常用的Javascript数据验证插件
Aug 04 Javascript
使用jQuery和ajax代替iframe的方法(详解)
Apr 12 jQuery
jQuery之动画ajax事件(实例讲解)
Jul 18 jQuery
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 Javascript
微信小程序 scroll-view实现锚点滑动的示例
Dec 06 Javascript
JS实现将链接生成二维码并转为图片的方法
Mar 17 Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 Javascript
vue 清空input标签 中file的值操作
Jul 21 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 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模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
常用PHP封装分页工具类
2017/01/14 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
Python实现批量读取word中表格信息的方法
2015/07/30 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
python实现简单文件读写函数
2021/02/25 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
某公司C#程序员面试题笔试题
2014/05/26 面试题
护理实习自我鉴定
2013/12/14 职场文书
大学运动会通讯稿
2014/01/28 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
市场营销专业自荐书
2014/06/10 职场文书
工作检讨书范文
2015/01/23 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
muduo TcpServer模块源码分析
2022/04/26 Redis
详解MySQL的内连接和外连接
2023/05/08 MySQL