vue-单文件组件相关

1 使用单文件组件

在vue中,组件包含模板,样式和脚本,但当定义组件的时候:

  将模板写在了html文件中

  将样式写在了css | less | scss文件中

  将脚本写在js | es文件中

vue为了简化维护组件的成本,建议将这三个部分放在同一个文件中。

  通过template元素定义模板,最外层根元素只能有且只有一个

  通过style元素定义样式

  通过script元素定义脚本,要使用ES Module规范。只定义组件对象即可(Vue.extend参数对象)

将文件的拓展名定义成.vue,这就是单文件组件

规范:将组件文件名称的首字母大写

2 编译

webpack构建中,浏览器不识别.vue文件,因此要将vue文件编译成js文件。

我们通过/.vue$/匹配vue文件

通过vue-loader加载机编译vue文件

注意:在webpack4.x版本中,还需要配置vue插件:

可以引入模块时解构方法:let { VueLoaderPlugin } = require("vue-loader");

在配置项中进行配置:plugins:[ new VueLoaderPlugin() ]

3 ShadowDOM

在组件中,定义的样式会污染其它的组件,可以通过shadowDOM技术来解决。

为style标签设置scoped属性

  此时当前组件内部的元素会添加属性选择器,

  添加的样式也会设置属性选择器

shadowDOM样式:只对当前组件生效,对其它的组件无效。

注意:子组件只在容器元素上设置属性选择器,内部的元素没有被添加

4 CSS 预编译

vue单文件组件内置了css预编译语言的解析器,可以直接使用这些语言。

通过lang属性来设置:

  lang="less" 使用less

  lang="scss" 使用scss

注意:在4.0中配置中,要定义less|sass加载机

5 函数组件

在子组件中,为了接收父组件的数据,要使用props属性接收,

vue为了简化这一过程,提供了函数组件:

  在模板中,设置functional属性即是一个函数组件

  此时就可以直接通过“props.属性”语法获取数据。

例如:在父组件模板中,为子组件传递属性数据:

 在子组件中模板中,设置functional属性,通过props.属性接收数据:

6 异步组件

之前定义组件的方式:let Home = Vue.extend({}),这种方式为同步创建;

将所有的资源都打包在一起会导致文件很大,浏览器加载很慢,影响用户体验。

vue为了减小文件体积,可以使用异步组件的技术。需要什么组件,则加载什么组件,

首次不需要加载的组件就不需要打包在一起了。有两种异步组件的形式:

  第一种:在函数的返回值中,返回Promise对象 (异步创建)

    在Promise方法中,执行异步操作,操作结束之后返回组件

  第二种:在函数的返回值中,返回通过import方法异步引入组件(异步加载)

    为了使用import方法,需要使用:babel-plugin-syntax-dynamic-import,babel的插件在plugins中配置

    注意:4.0改动:默认支持异步引入(import方法)4.0默认向dist目录下发布,因此要设置publicPath:表示引入静态资源相对位置。

7 拆分应用程序组件 

目前定义的vue实例化对象既包含模板,样式,脚本,也包含注册store, router等功能。因此vue实例化对象做了很多的事情。

为了让vue实例化对象职责更加的单一,则要将实例化对象中的模板,样式,脚本单独拆分出来,作为应用程序组件。

这样实例化对象中,就只剩下注册store,router等功能了

  1 将应用程序组件定义成App.vue,在内部,通过template定义模板,通过style定义样式,通过script定义脚本。

  2 为了在实例化对象中渲染应用程序组件,vue提供了一个render方法,参数是一个渲染方法,可以用来渲染应用程序。

  3 为了让应用程序上树(渲染到页面中),vue提供了$mount方法,用来上树。参数表示css选择器。会将该选择器对应的元素作为容器元素。

以后只需要在vue实例化对象中,注册路由,注册store等,实现一些功能即可。

注意:拆分的应用程序组件App.vue要注意:模板的根元素要设置id属性,与模板的id同值。(防止容器元素替换时,属性丢失)

8 混合

混合就是对组件的模板,样式,数据,方法等相关功能的复用。

vue支持两种混合:全局混合,局部混合

8.1 全局混合

全局混合会对所有的组件生效。通过Vue.mixin方法定义,参数就是继承的数据和方法等

8.2 局部混合

局部混合只能对当前组件生效。

在组件中通过mixins属性,实现对组件,数据,方法的继承

是一个数组,每一个成员表示一个继承的对象,可以组件,可以是对象等。

注意:

如果多个数据之间出现同名的属性数据:

  如果是模型中的数据和方法,后面的覆盖前面的。

  如果是生命周期方法,会暴露多个。并按照先后顺序依次执行。

继承之后,还可以重写被继承的数据,使用的时候,会优先使用重写的数据。

与组件不相关的数据和方法不会被组件继承。

9 插件

例如Vue Router,vueX等都属于插件

vue允许自定义插件,实现对vue拓展功能的复用。

封装好插件,就可以在不同的项目中,复用这些功能

9.1 定义插件

插件就是一个函数或者包含install方法的对象

  第一个参数表示Vue类

  从第二个参数开始表示使用插件的时候,传递给插件的数据。

函数:

包含install方法的对象:

9.2 使用插件

通过Vue.use方法来安装插件。

  第一个参数表示插件

  从第二个参数开始表示传递给插件的数据

入口文件中引入插件:

 

 组件中则可以使用:

原文地址:https://www.cnblogs.com/yess/p/14826522.html