基于Vue单文件组件详解


Posted in Javascript onSeptember 15, 2017

本文将详细介绍Vue单文件组件

概述

在很多 Vue 项目中,使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素。

这种方式在很多中小规模的项目中运作的很好,在这些项目里 JavaScript 只被用来加强特定的视图。但当在更复杂的项目中,或者前端完全由 JavaScript 驱动的时候,下面这些缺点将变得非常明显:

1、全局定义 (Global definitions) 强制要求每个 component 中的命名不得重复

2、字符串模板 (String templates) 缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \

3、不支持 CSS (No CSS support) 意味着当 HTML 和 JavaScript 组件化时,CSS 明显被遗漏

4、没有构建步骤 (No build step) 限制只能使用 HTML 和 ES5 JavaScript, 而不能使用预处理器,如 Pug (formerly Jade) 和 Babel

文件扩展名为 .vue 的 single-file components(单文件组件) 为以上所有问题提供了解决方法,并且还可以使用 Webpack 或 Browserify 等构建工具

下面是一个文件名为 Hello.vue 的简单实例:

基于Vue单文件组件详解

 通过单文件组合,现在我们获得:

1、完整语法高亮
2、CommonJS 模块
3、组件化的 CSS

还可以使用预处理器来构建简洁和功能更丰富的组件,比如 Pug,Babel (with ES2015 modules),和 Stylus。

基于Vue单文件组件详解

这些特定的语言只是例子,可以只是简单地使用 Babel,TypeScript,SCSS,PostCSS - 或者其他任何能够帮助提高生产力的预处理器。如果搭配vue-loader使用Webpack,它也是把CSS Modules当作第一公民对待

【关注点分离】

一个重要的事情值得注意,关注点分离不等于文件类型分离。在现代 UI 开发中,已经发现相比于把代码库分离成三个大的层次并将其相互交织起来,把它们划分为松散耦合的组件再将其组合起来更合理一些。在一个组件里,其模板、逻辑和样式是内部耦合的,并且把它们搭配在一起实际上使得组件更加内聚且更可维护。

即便不喜欢单文件组件,仍然可以把 JavaScript、CSS 分离成独立的文件然后做到热重载和预编译

<!-- my-component.vue -->
<template>
 <div>This will be pre-compiled</div>
</template>
<script src="./my-component.js"></script>
<style src="./my-component.css"></style>

起步

有了 .vue 组件,就进入了高级 JavaScript 应用领域

最好参考 webpack-simple。只要遵循指示,就能很快地运行一个用到 .vue 组件,ES2015 和 热重载 (hot-reloading) 的 Vue 项目。这个模板使用 Webpack,一个能将多个模块打包成最终应用的模块打包工具

在 Webpack 中,每个模块被打包到 bundle 之前都由一个相应的 “loader” 来转换,Vue 也提供 vue-loader 插件来执行 .vue 单文件组件 的转换。这个 webpack-simple 模板已经为你准备好了所有的东西

无论更钟情Webpack或是Browserify,简单的或更复杂的项目都可参考一些文档模板。浏览github.com/vuejs-templates,找到需要的部分,然后参考 README 中的说明,使用 vue-cli 工具生成新的项目

模板中使用 Webpack,一个模块加载器加载多个模块然后构建成最终应用

以上这篇基于Vue单文件组件详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
正则表达式语法
Oct 09 Javascript
jQuery Ajax使用 全解析
Dec 15 Javascript
IE6下focus与blur错乱的解决方案
Jul 31 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
Aug 05 Javascript
angularjs基础教程
Dec 25 Javascript
Angular2学习笔记——详解路由器模型(Router)
Dec 02 Javascript
vue中mint-ui环境搭建详细介绍
Apr 06 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
基于twbsPagination.js分页插件使用心得(分享)
Oct 21 Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
vue element upload实现图片本地预览
Aug 20 Javascript
vue中实现动态生成二维码的方法
Feb 21 Javascript
json2.js 入门教程之使用方法与实例分析
Sep 14 #Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
Sep 14 #Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 #Javascript
VsCode插件整理(小结)
Sep 14 #Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 #Javascript
vue 计时器组件的实现代码
Sep 14 #Javascript
详解tween.js的使用教程
Sep 14 #Javascript
You might like
一些花式咖啡的配方
2021/03/03 冲泡冲煮
PHP 文件扩展名 获取函数
2009/06/03 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
克隆javascript对象的三个方法小结
2011/01/12 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
极简的Python入门指引
2015/04/01 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python的时间模块datetime详解
2017/04/17 Python
使用Python 统计高频字数的方法
2019/01/31 Python
详解Python 切片语法
2019/06/10 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
python实现简单银行管理系统
2019/10/25 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
实例代码讲解Python 线程池
2020/08/24 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
Java的基础面试题附答案
2016/01/10 面试题
开工庆典邀请函范文
2014/01/16 职场文书
小学开学典礼主持词
2014/03/19 职场文书
静心口服夜广告词
2014/03/20 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
幸福终点站观后感
2015/06/04 职场文书
男生贾里读书笔记
2015/06/30 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏