zoukankan      html  css  js  c++  java
  • 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方法来安装插件。

      第一个参数表示插件

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

    入口文件中引入插件:

     

     组件中则可以使用:

  • 相关阅读:
    关于类型转换构造函数的疑惑点
    类模板与静态 成员变量
    模板与友元
    类模板与派生
    类模板
    函数模板
    泛型程序设计基本概念
    3、成员函数
    条款 06:若不想使用编译器自动生成的函数,就该明确拒绝
    PHP操作redis
  • 原文地址:https://www.cnblogs.com/yess/p/14826522.html
Copyright © 2011-2022 走看看