vue学习12.1

1.绑定style样式

html 复制代码
<template>
  <div>
    <button @click="increaseFontSize">增大字体</button>
    <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">
      动态样式示例
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeColor: 'blue',
      fontSize: 16
    };
  },
  methods: {
    increaseFontSize() {
      this.fontSize += 2; // 增加字体大小
    }
  }
};
</script>

2.条件渲染

html 复制代码
<template>
  <div>
    <button @click="toggle">点击切换显示</button>
    <p v-if="isVisible">这是一个可见的段落。</p>
    <p v-else>段落隐藏了。</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isVisible: true
    };
  },
  methods: {
    toggle() {
      this.isVisible = !this.isVisible; // 切换可见性
    }
  }
};
</script>

3.列表渲染

html 复制代码
<template>
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.text }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    };
  }
};
</script>

4.key作用与原理(未完成)

key 是 Vue 中用于跟踪节点身份的特殊属性,在进行虚拟 DOM 更新时用于优化:

作用:帮助 Vue 更准确地识别节点,提高渲染性能。

原理 :通过 key,Vue 可以精确地复用或者重新创建元素,避免不必要的DOM操作。

5.列表过滤

html 复制代码
<template>
  <ul>
    <li v-for="item in filteredList" :key="item.id">{{ item.text }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1', visible: true },
        { id: 2, text: 'Item 2', visible: false },
        { id: 3, text: 'Item 3', visible: true }
      ]
    };
  },
  computed: {
    filteredList() {
      return this.items.filter(item => item.visible); // 只返回可见的项
    }
  }
};
</script>

6.列表排序

html 复制代码
<template>
  <ul>
    <li v-for="item in sortedList" :key="item.id">{{ item.text }}: {{ item.value }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1', value: 50 },
        { id: 2, text: 'Item 2', value: 10 },
        { id: 3, text: 'Item 3', value: 30 }
      ]
    };
  },
  computed: {
    sortedList() {
      return this.items.slice().sort((a, b) => a.value - b.value); // 按值排序
    }
  }
};
</script>

slice,复制。不在原来的数组修改。sort排序函数。

  • sort() 方法 : 用于对数组进行排序。sort 方法接受一个比较函数。
  • 比较函数 (a, b) => a.value - b.value : 这个函数接受两个参数,分别是数组中的两个元素:
    • 如果返回值小于 0 ,则 a 会被排在 b 之前。
    • 如果返回值大于 0 ,则 b 会被排在 a 之前。
    • 如果返回值等于 0,则原顺序不变。
    • 在这个例子中,按照每个对象的 value 属性进行升序排序。

7.监测数据的原理

1)数据劫持

Vue 通过 Object.defineProperty 方法实现对数据的劫持。它会将 Vue 实例中的数据属性转换为 getter 和 setter,以便对数据的读写进行监控。

  • 获取数据(getter)时,Vue 会将依赖该数据的组件记录下来。
  • 设置数据(setter)时,Vue 会通知所有依赖该数据的组件重新渲染。

2) 依赖收集

在数据读取时,Vue 会记录哪些 watcher 依赖了这个数据(即哪些视图依赖了这个数据)。这个过程称为依赖收集。在 Vue 的实现中,watcher 是一个用于通知 Vue 进行视图更新的类。

3)响应式系统

当数据变化时,触发 setter,会调用相应的 watcher 的 update 方法,通知 Vue 进行视图更新。Vue 通过 虚拟 DOM 更新只改动那些有变化的部分,从而提高性能。

4)Vue 3 的 Proxy 机制

在 Vue 3 中,Vue 替换了 Object.defineProperty,使用了 Proxy 进行数据劫持。

javascript 复制代码
// Vue 2.x 代码示例
new Vue({
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  created() {
    console.log(this.message); // 触发 getter
  },
  methods: {
    updateMessage(newMessage) {
      this.message = newMessage; // 触发 setter,更新视图
    }
  }
});

8.过滤器

html 复制代码
<template>
  <div>{{ message | capitalize }}</div>
</template>

<script>
export default {
  data() {
    return {
      message: 'hello world'
    };
  },
  filters: {
    capitalize(value) {
      if (!value) return '';
      return value.charAt(0).toUpperCase() + value.slice(1);
    }
  }
};
</script>
  1. 定义过滤器:

    • filters:这是一个 Vue 组件的选项,定义了可以在模板中使用的过滤器。
    • capitalize:过滤器的名称,可以在模板中用 | capitalize 调用。
  2. 参数 value:

    • 这个参数是传入过滤器的值,通常是一个字符串。
  3. 检查 value:

    • if (!value) return '';:如果 value 是 false(例如 null、undefined 或空字符串),则返回一个空字符串。这防止后续代码在处理 undefined 或 null 时出错。
  4. 字符串处理:

    • value.charAt(0).toUpperCase():获取字符串的第一个字符并将其转换为大写。
    • value.slice(1):获取字符串从第二个字符开始的部分。
    • 将这两个部分拼接起来,形成处理后的字符串。

9.各种指令

1.v-text

替代{{ }}

html 复制代码
<template>
  <div v-text="message"></div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello, Vue!'
    };
  }
};
</script>

2.v-html

v-html 用于更新元素的 innerHTML,能解析 HTML 字符串。

html 复制代码
<template>
  <div v-html="htmlContent"></div>
</template>

<script>
export default {
  data() {
    return {
      htmlContent: '<p>This is <strong>HTML</strong> content</p>'
    };
  }
};
</script>

3.v-ones

v-once 用于只渲染元素和组件一次,之后的更新不再影响这些元素。

html 复制代码
<template>
  <div v-once>{{ message }}</div>
</template>

<script>
export default {
  data() {
    return {
      message: 'This will not change even if the data updates'
    };
  }
};
</script>
相关推荐
程序员Sunday8 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
志尊宝9 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
默_笙10 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
李日华大战鸡红10 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
思无邪6610 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能
kkkkkkkkkk_Z12 小时前
新手自学嵌入式 | 学习日记:异常与中断基础、i.MX6ULL裸机开发环境搭建、GPIO模块与点灯原理
学习
福兮说12 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
m4Rk_13 小时前
【论文阅读】Agent 记忆机制(94):MemGen——在推理过程中动态生成并织入潜在记忆
论文阅读·人工智能·学习·开源·github
晓德13 小时前
0、LLM大模型安全学习系列(启)
学习·安全
可乐鸡翅yeah_13 小时前
video.js 集成 hls.js 开发 M3U8 播放器,新手高频踩坑
开发语言·前端·javascript·后端·ecmascript·m3u8·音视频在线播放