v-bind 在标签上绑定属性

  • v-bind:class
    • :class
  • v-bind:style
    • :style

Vue 对 v-bind:class / style 进行了特殊的封装
形式比较多

  • 对象和数组的绑定方式

    class

    对象方式 ```vue
数组方式vue

// 不太建议,虽然视图可以写逻辑,但尽可能避免在视图中使用逻辑运算,逻辑部分应交给 computed 和 methods

  1. 父组件调用子组件的 class props 传到子组件并与其内的根元素的 class 结合,Vue2 所有组件都只有一个根元素<br />由于 Vue3 支持多个根元素,需要手动来传。 $attrs 父组件通过调用组件时的传递的属性的集合 $attributes
  2. ```vue
  3. <div
  4. :class="[
  5. 'my-alert',
  6. hasError ? errorClass : '',
  7. $attrs.class
  8. ]"
  9. >
  10. </div>
  1. const MyAlert = {
  2. data() {
  3. return {
  4. title: 'This is my first ALERT',
  5. content: 'This is my content for my first ALERT.'
  6. isShow true,
  7. hasError: true,
  8. //alertClassObject: {
  9. // show: true,
  10. // 'bg-danger': true
  11. //},
  12. showClass: 'show',
  13. errorClass: 'danger'
  14. }
  15. },
  16. computed: {
  17. alertClassObject() {
  18. return {
  19. show: this.isShow,
  20. danger: this.isShow && this.hasError
  21. }
  22. }
  23. },
  24. template: `
  25. <!--<div class="my-alert danger show">-->
  26. <!--<div
  27. class="my-alert"
  28. :class="{
  29. // 加某个样式类名的真假条件
  30. show: 'isShow',
  31. danger: 'hasError'
  32. }"
  33. >-->
  34. <!--<div
  35. class="my-alert"
  36. :class="alertClassObject"
  37. >-->
  38. <!--<div
  39. :class="['my-alert', showClass, errorClass]"
  40. >-->
  41. <div
  42. :class="[
  43. 'my-alert',
  44. isShow ? showClass : '',
  45. isShow && hasEvent ? errorClass : ''
  46. ]"
  47. >
  48. <header class="header">
  49. <h1>{{ title }}</h1>
  50. </header>
  51. <div class="content">
  52. <p>{{ conntent }}</p>
  53. </div>
  54. <div class="btn-group">
  55. <button>Confirm</button>
  56. </div>
  57. </div>
  58. `
  59. };
  60. const App = {
  61. components: {
  62. MyAlert
  63. },
  64. data() {
  65. return {
  66. showClass: 'show'
  67. }
  68. },
  69. template:`
  70. <my-alert :class="showClass"/>
  71. `
  72. };
  73. Vue.createApp(App).mount('#app');

各种变量命名法

camelCase 小驼峰命名法

  • thisIsMyVariable
  • 变量名、方法名

kebab-case 短横线命名法

  • this-is-my-variable
  • 脊柱命名法 spinal-case train-case
  • 对象的属性名、CSS常规的类名 -> BEM规范

snake_case 蛇形命名法

  • this_is_my_variable
  • 大写的常量 const ERROR_TYPE = {}, pythone 推荐

匈牙利命名法 变量 => 属性 + 类型 -> 描述
lpszTest -> lpsz 以空字符为结尾的字符串长度整形指针 Test
PascalCase 大驼峰命名法

  • ThisIsMyVariable
  • 类名、组件名、大模块名

    style

    v-bind:style / :style 传入 JS 对象或数组,属性名可以用 camelCase 或 kebab-case
    1. data(){
    2. return {
    3. btnBgColor: 'red',
    4. btnStyle: {
    5. color: '#fff',
    6. backgroundColor: 'red'
    7. },
    8. commonBtnStyle: {
    9. borderRadius: '17px'
    10. }
    11. }
    12. }
    1. <button
    2. :style="{
    3. color: '#fff',
    4. //backgroundColor: 'red'
    5. // 赋值变量
    6. 'background-color': btnBgColor
    7. }"
    8. >
    9. Confirm
    10. </button>
    1. <button :style="btnStyle" >
    2. Confirm
    3. </button>
    1. <button :style="[btnStyle, commonBtnStyle]" >
    2. Confirm
    3. </button>
    ```vue // 渲染数组中最后一个被浏览器支持的值,如果浏览器本身支持不带前缀的值,那就渲染不带前缀的值

// 在 Chrome 运行时,-webkit- 会被去掉 // :style 使用中, Vue 会在运行时自动检测添加相应的前缀

```