Vue深入(1)

本文详细介绍了Vue.js中的数据驱动理念,MVVM架构模式以及其核心要素——计算属性和监听器(watch)。计算属性提供缓存功能,只在依赖变化时更新。watch用于执行异步操作或响应多个值变化。此外,还阐述了Vue组件的生命周期,包括挂载、更新和销毁阶段。组件化是提升代码复用性的关键,而路由缓存利用`<keep-alive>`可以优化用户体验。最后,讨论了Vue的hash模式与history模式,并提到了在history模式下可能遇到的问题及其解决方案。

数据驱动理念

简单的来说,当数据发生变化时,页面也会跟着变化,开发者不需要手动修改dom

MVVM

M:modal:数据 V:view 视图 ViewModal:数据和视图连接的桥梁(实例化)
MVVM三要素:

计算属性

好处:有缓存的效果。当一个计算属性所依赖的数据发生变化时,他才会重新获取值
作用:计算的结果会被缓存,除非依赖的响应式prototype发生变化才会计算+
注意:如果某个依赖(非prototype)在该实例范畴之外,数据不会自动更新,示例如下:

var vm = new Vue({
  data: { a: 1 },
  computed: {
    // 仅读取
    aDouble: function () {
      return this.a * 2
    },
    // 读取和设置
    aPlus: {
      get: function () {
        return this.a + 1
      },
      set: function (v) {
        this.a = v - 1
      }
    }
  }
})
vm.aPlus   // => 2
vm.aPlus = 3
vm.a       // => 2
vm.aDouble // => 4

watch和computed

watch: 执行异步操作或较大开销的操作 ,一个值影响多个值的变化
computed:多个值影响一个值的变化
由于computed有缓存 所以在实际操作中两个都能使用的时候 优先考虑computed

生命周期函数

挂载:

  1. beforeCreate
  2. created
  3. beforeMount
  4. mounted

更新:(元素或组件发生变化操作)

  1. beforeUpdate
  2. updated

销毁:

  1. beforeDestory
  2. destoryed

图解
在这里插入图片描述
在组件中关于data不是一个对象,而是一个函数的原因,官方文档有明确的说明

组件化理解

定义: 组件是可复用的实例
应用场景:

  1. 通用型组件:实现最基本的功能,具有通信性和可复用性
  2. 业务组件:用于完成具体的业务功能
  3. 页面组件 :页面中的内容应该放在独立的组件中,根据需求进行切换

路由组件缓存

<keep-alive include="要进行缓存路由的名称" ><router-view/></keep-alive>

注意:要设置缓存的路由时候 在定义router下的路由规则需要设置name属性 name的值和上面include的值一样
keep-alive有两个钩子函数:activated,deactivated
activated:执行时机为 当a页面跳转到b页面(必须是缓存页面)的时候触发 用来执行需要更新的数据
deactivated:执行时机 从b页面跳出的时候执行
点击刷新后执行的钩子函数:created—>mounted—>activated
应用场景: 当从商品列表页面跳转到商品详情页面,在点击返回的时候 数据并没有发生变化要展示的还是原来的数据的情况下 可以使用路由缓存

hash模式与history模式

设置方式 默认为hash模式
要设置为history模式 只需要在配置路由的地方加一个mode属性 值为history 就ok了
注意:history模式存在问题 在初次加载的时候页面没有问题,是由于第一次加载的时候是调用的h5中的history.pushState()加载,但是在刷新之后,前端会发送请求,后端是没有接口只是加载了静态资源的数据,只是将index.html返回,解决方式为导入connect-history-api-fallback 然后使用express的use中间件启用

const app = express()
const history = require("connect-history-api-fallback")
app.use(history())

nginx配置history路由模式原理及方法

在这里插入图片描述

错误识别处理

在这里插入图片描述
出现这种错误的原因是因为 vue有运行时版本和完成时版本 运行时版本不支持template模板语法 只有完成版本才支持template模板语法,完成时版本比运行时版本大10k左右
解决方式:两种

  1. 设置vue.config.js文件的runtimepiler的值为true 将运行时版本改变为完整版(本质上也是通过构建render函数的方式 不过是自动转换 不需要人为动手)
  2. 通过构建render函数的方式解决
 // template: `<a :href="to" ><slot></slot></a>`
      // 通过构建render函数的方式解决运行时版本不能解析template模板问题
      render(h) {
        // h有三个参数 
        //第一个参数 要创建的标签名,
        //第二个参数 要创建标签的属性 是一个对象 , 
        //第三个参数 要创建标签前中嵌套的标签 是一个数组
         return h("a", {
          attrs: {
            href: this.to
          }
        },
        // 获取匿名slot的方式 为 this.$slot.default
        [this.$slots.default])
      }
基于模拟退火的计算器 在线运行 访问run.bcjh.xyz。 先展示下效果 https://pan.quark.cn/s/cc95c98c3760 参见此仓库。 使用方法(本地安装包) 前往Releases · hjenryin/BCJH-Metropolis下载最新 ,解压后输入游戏内校验码即可使用。 配置厨具 已在2.0.0弃用。 直接使用白菜菊花代码,保留高级厨具,新手池厨具可变。 更改迭代次数 如有需要,可以更改 中39行的数字来设置迭代次数。 本地编译 如果在windows平台,需要使用MSBuild编译,并将 改为ANSI编码。 如有条件,强烈建议这种本地运行(运行可加速、可多次重复)。 在 下运行 ,是游戏中的白菜菊花校验码。 编译、运行: - 在根目录新建 文件夹并 至build - - 使用 (linux)(windows) 运行。 最后在命令行就可以得到输出结果了! (注意顺序)(得到厨师-技法,表示对应新手池厨具) 注:linux下不支持多任务选择 云端编译已在2.0.0弃用。 局限性 已知的问题: - 无法得到最优解! 只能得到一个比较好的解,有助于开阔思路。 - 无法选择菜品数量(默认拉满)。 可能有一定门槛。 (这可能有助于防止这类辅助工具的滥用导致分数膨胀? )(你问我为什么不用其他语言写? python一个晚上就写好了,结果因为有涉及json读写很多类型没法推断,jit用不了,算这个太慢了,所以就用c++写了) 工作原理 采用两层模拟退火来最大化总能量。 第一层为三个厨师,其能量用第二层模拟退火来估计。 也就是说,这套方法理论上也能算厨神(只要能够在非常快的时间内,算出一个厨神面板的得分),但是加上厨神的食材限制工作量有点大……以后再说吧。 (...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值