基于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 相关文章推荐
js性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
JavaScript移除数组元素减少长度的方法
Sep 05 Javascript
JavaScript中数组的合并以及排序实现示例
Oct 24 Javascript
利用Javascript实现BMI计算器
Aug 16 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
Oct 29 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
Jan 05 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
BootStrap模态框不垂直居中的解决方法
Oct 19 Javascript
详解如何用模块化的方式写vuejs
Dec 16 Javascript
vue.js中npm安装教程图解
Apr 10 Javascript
React组件设计模式之组合组件应用实例分析
Apr 29 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 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
php session和cookie使用说明
2010/04/07 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
shiro授权的实现原理
2017/09/21 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
图文详解vue框架安装步骤
2019/02/12 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
python中pygame模块用法实例
2014/10/09 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
python扫描线填充算法详解
2020/02/19 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
利用python爬取有道词典的方法
2020/12/08 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
学生检讨书怎么写
2014/10/09 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
财务管理制度范本
2015/08/04 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
nginx访问报403错误的几种情况详解
2022/07/23 Servers