Vue(四)——单文件组件

  • Post author:
  • Post category:vue



单文件组件


vue

的单文件组件是官方提供的一种用来组织组件代码的形式,该文件以

.vue

为后缀,该文件会被

vue-cli

内置的

webpack

解析生成对应的

javascript



html



css

文件


https://vue-loader-v14.vuejs.org/zh-cn/start/spec.html

一、组成

单文件组件把一个组件所包含的


结构



样式



行为

分别通过

template



style



script

进行分离

包含,然后统一组织在一个文件中


一个单文件组件最少必须包含

template


,可以不需要

script



style

<template>
  <div class="example">{{ msg }}</div>
</template>

<script>
export default {
  data () {
    return {
      msg: 'Hello world!'
    }
  }
}
</script>

<style>
.example {
  color: red;
}
</style>

二、lang属性

无论是

template



script

还是

style

,都可以通过

lang

属性来指定它们所使用的语言

可通过template中的lang属性加载jade;script使用lang属性加载其他非js语言如ts等;style中使用lang属性加载一些其他CSS框架

<template lang="jade">
  div.example
		p {{ msg }}
</template>

<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
  data () {
    return {
      msg: 'Hello world'
    }
  }
})
</script>

<style lang="stylus">
.example
  color red
</style>

三、src属性

我们还可以通过

src

属性把文件分离到单独的文件中

<template src="./template.html"></template>
<style src="./style.css"></style>
<script src="./script.js"></script>

这里的

src

同样遵循模块化的导入规则,


./

开头的表示相对路径,

/

开头表示

NPM

包中的资源  (定位到node_module下)

,主要是根据webpack中配置决定的,可进行更改。

四、有作用域的CSS—

scoped

属性



style

标签有

scoped

属性时,它的

CSS


只作用于当前组件中的元素

。这类似于

Shadow DOM

中的样式封装。解析后自动给template和style中加上data-v-XXXX特殊的属性选择器

<style scoped>
.example {
  color: red;
}
</style>

<template>
  <div class="example">hi</div>
</template>

解析后:

<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>

<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>

4.1混用本地和全局样式

<style>
/* 全局样式 */
</style>

<style scoped>
/* 本地样式 */
</style>

五、资源路径处理

在项目开发中,我们经常会碰到要引入外部资源的需求,

vue

单文件系统中,对资源引入路径有一定的特殊处理

  • 绝对路径前缀
  • 相对路径前缀
  • 特殊前缀

5.1绝对路径前缀

就是以

/



https://kaikeba.com/

等这样的绝对路径开头的,不做任何处理,直到被浏览器解析

5.2相对路径前缀

就是以

./



../

这样的相对路径开头的,将会被看作相对的模块依赖,并按照你的本地文件系统上的目录结构进行解析,如:

<img src="../a.png">

解析后:

<img src="require('../a.png')">

,类似的还包括

background: url(...)



@import

5.3特殊前缀

  • 如果路径以


    ~

    开头

    ,其后的部分将会被看作模块依赖。这意味着你可以用该特性来引用一个 node(NPM 包) 依赖中的资源,如:

    <img src="~some-npm-package/a.png">
  • 如果路径以


    @

    开头

    ,也会被看作模块依赖。如果你的 webpack 配置中给

    @

    配置了 alias,这就很有用了。所有

    vue-cli

    创建的项目都

    默认配置了将

    @

    指向

    /src



版权声明:本文为qq_34569497原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。