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实现简单的顶部定时关闭层效果
Jun 15 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
Sep 09 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
微信JSAPI支付操作需要注意的细节
Jan 10 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
Mar 08 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
Oct 24 Javascript
JS中精巧的自动柯里化实现方法
Dec 12 Javascript
微信小程序自定义tab实现多层tab嵌套功能
Jun 15 Javascript
js实现弹出框的拖拽效果实例代码详解
Apr 16 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 Javascript
JavaScript实现栈结构详细过程
Dec 06 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-fpm配置详解
2014/02/12 PHP
PHP小技巧之函数重载
2014/06/02 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
js查找父节点的简单方法
2008/06/28 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
微信小程序时间选择插件使用详解
2018/12/28 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
架构师岗位职责
2013/11/18 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
搞笑获奖感言
2014/01/30 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
鼓舞士气的口号
2014/06/16 职场文书
法人授权委托书样本
2014/09/19 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
无房证明样本
2015/06/17 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
浅析Python中的随机采样和概率分布
2021/12/06 Python
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python
volatile保证可见性及重排序方法
2022/08/05 Java/Android