Vue单文件组件的如何使用方式介绍


Posted in Javascript onJuly 28, 2017

在很多 vue项目中,我们使用 vue.component 来定义全局组件,紧接着用 new vue(el: ”)在每个页面内指定一个容器元素

这种方式在很多中小规模的项目中运作的很好,在这些项目里 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 的 sigle-file components(单文件组件)为以上所有问题提供了解决方法,并且还可以使用 webpack 或 browserify 等构建工具

这是一个文件名为 hello.vue的简单实例

<template>

  <p> {{ gretting}} world! </p>
</template>


<script>
  module.exports = {
    data: function(){
      return {
        greeting: 'hello'
      }
    }
  }
</script>

<style scoped>
p {
  font-size: 2em;
  text-algin: center
}

</style>

现在我们获得:

  • 完整语法高亮
  • commonJs 模板
  • 组件化的 css

正如我们说过的,我们可以使用预处理器来构建简洁和功能更丰富的组件,比如 pug,babel,和 stylus

<template lang="jade">
  div
    p {{greeting}} world!
    other-component 
</template>

<script>
  import default{
    data(){
      return{
        greeting:'hello'
      }
    },
    components: {
      OtherComponent
    }
  }
</script>

<style lang='stylus' scoped>
  p
   font-size: 2em;
   text-align: center  
</style>

这些特定的语言只是例子,你可以只是简单地使用 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
Dec 20 Javascript
JavaScript将XML转成JSON的方法
Mar 12 Javascript
jquery拖拽效果完整实例(附demo源码下载)
Jan 14 Javascript
window.onerror()的用法与实例分析
Jan 27 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
Mar 07 Javascript
jQuery弹出层插件popShow用法示例
Jan 23 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
p5.js入门教程之鼠标交互的示例
Mar 16 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
Redux实现组合计数器的示例代码
Jul 04 Javascript
JavaScript面向对象继承原理与实现方法分析
Aug 09 Javascript
解决vue 给window添加和移除resize事件遇到的坑
Jul 21 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 #Javascript
jQuery dateRangePicker插件使用方法详解
Jul 28 #jQuery
完美实现js拖拽效果 return false用法详解
Jul 28 #Javascript
webpack 2的react开发配置实例代码
Jul 28 #Javascript
基于AngularJS实现表单验证功能
Jul 28 #Javascript
AngularJS service之select下拉菜单效果
Jul 28 #Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 #Javascript
You might like
PHP新手上路(六)
2006/10/09 PHP
PHP源码之explode使用说明
2011/08/05 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
Angular2库初探
2017/03/01 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
python中文乱码的解决方法
2013/11/04 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
python绘制简单折线图代码示例
2017/12/19 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
django中嵌套的try-except实例
2020/05/21 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
质量管理标语
2014/06/12 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
测量员岗位职责
2015/02/14 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL