>[success] # attribute 强制行为
~~~
1.在使用vue 时候经常使用'v-bind' 对标签属性进行动态绑定,vue2.x 时候将这些属性按照分类分为三种
'布尔属性'/'枚举属性'/'其他属性',在vue3.x 开始属性种类只分为'布尔属性'/'其他属性'
2.枚举属性有'contenteditable,draggable,spellcheck'
布尔属性有'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
'required,reversed,scoped,seamless,selected,sortable,translate,' +
'truespeed,typemustmatch,visible'
~~~
>[info] ## 2.x 三种属性规则
~~~
1.普通类型:'如果是(undefined,null,或 false)移除该属性,其他则赋值是啥就是啥'
2.枚举类型:'contenteditable,draggable,spellcheck' 这三类枚举类型赋值为'undefined'则移除属性,其他无论你赋值成什么值,
都会将值转换成对应的布尔字符串,'contenteditable' 比较特殊因为他的枚举类型不仅仅只包含
'true 和false'含'events,caret,typing,plaintext-only',如果是这三个,值则不进行布尔字符串转换
3.布尔类型:'如果是(undefined,null,或 false)移除该属性,但如果其他属性那则为对应本身'
~~~
* 官方给到图
~~~
1.第一列是当使用绑定值时候,第二列是普通属性渲染情况,第三列是枚举类型渲染情况
~~~
| 绑定表达式 | `foo`正常 | `draggable`枚举 |
| --- | --- | --- |
| `:attr="null"` | \- | `draggable="false"` |
| `:attr="undefined"` | \- | \- |
| `:attr="true"` | `foo="true"` | `draggable="true"` |
| `:attr="false"` | \- | `draggable="false"` |
| `:attr="0"` | `foo="0"` | `draggable="true"` |
| `attr=""` | `foo=""` | `draggable="true"` |
| `attr="foo"` | `foo="foo"` | `draggable="true"` |
| `attr` | `foo=""` | `draggable="true"` |
>[info] ## Vue3.x 两种属性规则
~~~
1.其他属性:现在的'枚举属性'已经和'其他属性' 归为一类,因为之前'contenteditable' 枚举属性在发展阶段时候赋予了
除了'false/true' 其他值的概念,不如索性就将其归类为其他属性,当'undefined,null' 该属性会被移除,其他赋值会一比一显示
2.布尔属性:'如果是(undefined,null,或 false,0,-0)移除该属性,但如果其他属性那则为对应本身'
~~~
* 官方解释
~~~
1.现在可以发现 枚举和其他属性 他们的表现形式已经统一
~~~
| 绑定表达式 | `foo`正常 | `draggable`枚举 |
| --- | --- | --- |
| `:attr="null"` | \- | \-\* |
| `:attr="undefined"` | \- | \- |
| `:attr="true"` | `foo="true"` | `draggable="true"` |
| `:attr="false"` | `foo="false"`\* | `draggable="false"` |
| `:attr="0"` | `foo="0"` | `draggable="0"`\* |
| `attr=""` | `foo=""` | `draggable=""`\* |
| `attr="foo"` | `foo="foo"` | `draggable="foo"`\* |
| `attr` | `foo=""` | `draggable=""`\* |
>[danger] ##### vue3.x 百分百移除属性
~~~
在 3.x 中,应该使用 null 或 undefined 以显式移除 attribute。
~~~
>[info] ## 官方文章解释
[attribute 强制行为](https://v3.cn.vuejs.org/guide/migration/attribute-coercion.html#_3-x-%E8%AF%AD%E6%B3%95)
- 官网给的工具
- 声明vue2 和 vue3
- 指令速览
- Mustache -- 语法
- v-once -- 只渲染一次
- v-text -- 插入文本
- v-html -- 渲染html
- v-pre -- 显示原始的Mustache标签
- v-cloak -- 遮盖
- v-memo(新)-- 缓存指定值
- v-if/v-show -- 条件渲染
- v-for -- 循环
- v-bind -- 知识
- v-bind -- 修饰符
- v-on -- 点击事件
- v-model -- 双向绑定
- 其他基础知识速览
- 快速使用
- 常识知识点
- key -- 作用 (后续要更新)
- computed -- 计算属性
- watch -- 侦听
- 防抖和节流
- vue3 -- 生命周期
- vue-cli 和 vite 项目搭建方法
- vite -- 导入动态图片
- 组件
- 单文件组件 -- SFC
- 组件通信 -- porp
- 组件通信 -- $emit
- 组件通信 -- Provide / Inject
- 组件通信 -- 全局事件总线mitt库
- 插槽 -- slot
- 整体使用案例
- 动态组件 -- is
- keep-alive
- 分包 -- 异步组价
- mixin -- 混入
- v-model-- 组件
- 使用计算属性
- v-model -- 自定义修饰符
- Suspense -- 实验属性
- Teleport -- 指定挂载
- 组件实例 -- $ 属性
- Option API VS Composition API
- Setup -- 组合API 入口
- api -- reactive
- api -- ref
- 使用ref 和 reactive 场景
- api -- toRefs 和 toRef
- api -- readonly
- 判断性 -- API
- 功能性 -- API
- api -- computed
- api -- $ref 使用
- api -- 生命周期
- Provide 和 Inject
- watch
- watchEffect
- watch vs. watchEffect
- 简单使用composition Api
- 响应性语法糖
- css -- 功能
- 修改css -- :deep() 和 var
- Vue3.2 -- 语法
- ts -- vscode 配置
- attrs/emit/props/expose/slots -- 使用
- props -- defineProps
- props -- defineProps Ts
- emit -- defineEmits
- emit -- defineEmits Ts
- $ref -- defineExpose
- slots/attrs -- useSlots() 和 useAttrs()
- 自定义指令
- Vue -- 插件
- Vue2.x 和 Vue3.x 不同点
- $children -- 移除
- v-for 和 ref
- attribute 强制行为
- 按键修饰符
- v-if 和 v-for 优先级
- 组件使用 v-model -- 非兼容
- 组件
- h -- 函数
- jsx -- 编写
- Vue -- Router
- 了解路由和vue搭配
- vueRouter -- 简单实现
- 安装即使用
- 路由懒加载
- router-view
- router-link
- 路由匹配规则
- 404 页面配置
- 路由嵌套
- 路由组件传参
- 路由重定向和别名
- 路由跳转方法
- 命名路由
- 命名视图
- Composition API
- 路由守卫
- 路由元信息
- 路由其他方法 -- 添加/删除/获取
- 服务器配置映射
- 其他
- Vuex -- 状态管理
- Option Api -- VUEX
- composition API -- VUEX
- module -- VUEX
- 刷新后vuex 数据同步
- 小技巧
- Pinia -- 状态管理
- 开始使用
- pinia -- state
- pinia -- getter
- pinia -- action
- pinia -- 插件 ??
- Vue 源码解读
- 开发感悟
- 练手项目