美文网首页
vue问题记录

vue问题记录

作者: 土豆切成片 | 来源:发表于2019-02-27 10:55 被阅读0次

关于在组件的局部作用域引入css样式

  • 1. 通常使用做法:
    在组件内部script标签内引入, 会在该组件运行时被加载, 并暴露到全局, 对同时运行在实例中的的兄弟及父组件页面, 可能会造成样式污染的问题

    image.png
  • 2. 推荐在引入第三方css资源时使用的做法:
    在组件内部加有 scoped 属性的 style 标签内部, 并且最好在该组件最外层容器的内部进行引入; 前提是要使用scss或者less预处理器进行编译, 否则无法这样在选择器内引入css文件

    image.png
  • 3. 针对在组件中单独引入bootstrap.css但加scoped属性引入无效, 造成无法实现局部引入bootstrap的处理方式
    问题描述: 在项目中, 尝试在组件内单独引入bootstrap, 使用第二种方式,并无法实现, 有两个问题:

    1. 加scoped属性会造成bootstrap样式引入无效, 故需取消scoped属性,
    2. 虽然取消了scoped 属性,可以成功引入样式, 但在组件内部容器引入bootstrap.css文件, 并无法形成单独的作用域,

    解决方法: 当前使用的预处理器为scss, 同时在bootstrap-npm包中也提供有scss样式资源, 需直接引入.scss样式文件, 在vue解析的时候, 会通过预处理器 按照书写及引入的先后顺序编译样式同时引入资源, 引入的样式会全部在所在组件容器里进行编译及渲染, 从而形成单独的作用域

    image.png
    image.png

关于异步路由与异步组件

异步路由
使用异步路由可以根据URL自动加载所需页面的资源, 并且不会造成页面阻塞,较适用于移动端页面, 建议主页面直接import, 非主页可使用异步路由

// 使用方式 : 
{
 path: '/order',
 component: () => import('./views/order.vue')
}

异步组件
不需要首屏加载的组件都可以使用异步组件的方式来加载, 包括需要触发条件的动作也使用异步组件(如弹框), 用v-if来控制显示时机, 引入组件的promise即可
演示:

// 在异步子组件中,mounted 函数中是无法获取到子组件的实例的,所以我们需要对组件异步加载做了一些特殊的控制,
// 其中 import().then() 则是在加载完子组件的 .js 文件后,实例化子组件之前的回调,
// 如果需要处理出错的情况,则 import().then().catch() 即可。
// 以上代码只是注入了一个 created 函数,如果要注入其他生命周期函数,例如 mounted,也是类似的:
<template>
  <div>
    <my-demo ref="demo"></my-demo>
  </div>
</template>

<script>
export default {
  components: {
    MyDemo: () => import('./Demo').then(component => {
      // 清理已缓存的组件定义
      component.default._Ctor = {}

      if (!component.default.attached) {
        // 保存原组件中的 created 生命周期函数
        component.default.backupCreated = component.default.created
        // 保存原组件中的 mounted 生命周期函数
        component.default.backupMounted = component.default.mounted
      }

      // 注入一个特殊的 created 生命周期函数
      component.default.created = function() {
        // 子组件已经实例化完毕

        // this 即为子组件 vm 实例
        console.log(this)

        if (component.default.backupCreated) {
          // 执行原组件中的 created 生命周期函数
          component.default.backupCreated.call(this)
        }
      }
      // 注入一个特殊的 mounted 生命周期函数
      component.default.mounted = function() {
        if (component.default.backupMounted) {
          // 执行原组件中的 mounted 生命周期函数
          component.default.backupMounted.call(this)
        }
      }

      // 表示已经注入过了 
      component.default.attached = true

      return component
    })
  }
}
</script>

相关文章

  • vue-各种兼容问题

    使用vue框架在ios里面返回白屏问题记录

  • 2018-11-21

    vue-cli 3.0 使用小结 个人使用 VUE-CLI 3.0 碰到一些问题,用作记录 VUE-CLI 3.0...

  • Vue问题记录

    一、数据更新问题 数据更改界面没更新问题原因:数据层次太多,没有触发render函数进行自动更新1、需手动调用 2...

  • vue问题记录

    关于在组件的局部作用域引入css样式 1. 通常使用做法:在组件内部script标签内引入, 会在该组件运行时被加...

  • vue问题记录

    今天在vue-cli项目时出现了一排错误 里面说我的keys重复了导致更新错误,随后我想想了,我只在循环里面用到了...

  • Vue填坑记录

    记录使用Vue 2.6.11过程中遇到的一些问题及其解决办法 vue和vue-template-compile的版...

  • Vue开发知识

    主要记录一些Vue开发过程中遇到的问题

  • VUE

    最近在学习vue,碰到一些问题记录下来,有些问题花了很长时间去找答案。顺便记录下来吧。 一.vue基础 1.在vu...

  • vite + vue3多页面配置记录references,loa

    目的:使用vite创建vue3项目记录细节点 上篇vue2/vue3 + webpack多页面遇到的问题和思考[h...

  • vue spa预渲染

    本文主要用于记录在单页面SEO优化中遇到的问题 技术栈:vue-cli webpack vue-meta-info...

网友评论

      本文标题:vue问题记录

      本文链接:https://www.haomeiwen.com/subject/kdexuqtx.html