基于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 相关文章推荐
JavaScript入门教程(3) js面向对象
Jan 31 Javascript
js图片自动切换效果处理代码
May 07 Javascript
鼠标移动到图片名上,显示图片的简单实例
Jul 14 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
实现非常简单的js双向数据绑定
Nov 06 Javascript
jquery制做精致的倒计时特效
Jun 13 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
canvas绘制多边形
Feb 24 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
mysql 全文搜索 技巧
2007/04/27 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
jQuery的链式调用浅析
2010/12/03 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
js尾调用优化的实现
2019/05/23 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
解决python读取几千万行的大表内存问题
2018/06/26 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Python如何调用外部系统命令
2019/08/07 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python可以用来做什么
2020/11/23 Python
Python页面加载的等待方式总结
2021/02/28 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
工商管理系学生的自我评价分享
2013/11/29 职场文书
计算机专业优秀大学生自我总结
2014/01/21 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
开网店计划分析
2019/07/30 职场文书
python可视化大屏库big_screen示例详解
2021/11/23 Python
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
Oracle中update和select 关联操作
2022/01/18 Oracle
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python