vue一周小结(5)

一.props一般用于父子组件通信

         1.只接收值
         props:["name","age"],
         2.约束类型
         props:{
         name:String,
         age:Number
                   },
         3.约束类型,必要性,指定默认值
         props:{
         name:{
               type:String,
               required:true,
               default:"李四"
                   },
               age:{
               type:Number,
               required:false,
               default:100
                  }
       
        

二.组件规则 

 1.向外暴露的名称需要使用驼峰命名(推荐使用),使用-连接
 2.导入组件时,取的名称最好暴露的名称一致,名称可以任意定义(不推荐)
 3.但凡注册了组件,必须使用组件

例:

export default {
  name: 'App',
  components: {
    // HelloWorld,
    // "aaa":HelloW,
    // stutend,
    MyDay01
  },
  data() {
    return {
      // msg:"我是测试的元素111111111",
      // msgs:"我是测试的元素22222222"
      ages:20,
    }
  },
  methods: {
    // func1(){
    //   console.log(this.$refs);
    //   // 1.给元素设置ref,获取的是Dom
    //   // console.log(this.$refs.newRef.style.color);
    //   // console.log(this.$refs.newRef.className);
    //   // console.log(this.$refs.newRef.title);
    //   // 给组件设置ref,获取的是vc
    //   console.log(this.$refs.stuRef.userName);
    // }
  },

三. 自定义事件

例:

template>
  <div>
    <h1>我是day03组件</h1>
    <button @click="btn()">提供自定义事件</button>
    <h1>{{ userName }}</h1>
    <h1>{{ age }}</h1>
  </div>
</template>

<script>
export default {
    name:"MyDay03",
    props:["age"],
    data() {
        return {
            userName:"张三",
            // age:"小红"
            ids:99,
            str:"我是自定义事件点击"
        }
    },
    methods:{
        btn(){
            this.$emit("wq",this.userName)
            this.$emit("zpj",this.ids)
            this.$emit("click")
        }
    },
    // created(){
    //     this.$emit("wq",this.userName)
    // }
}
</script>

你遇到的错误是: ``` TypeError: currentMonth.value.startOf(...).isoWeekday is not a function ``` 这个错误说明:你调用 `.isoWeekday()` 时,它并不是 `dayjs` 实例上的方法,**这意味着你当前的 `dayjs` 版本可能没有正确导入或使用了错误的构建方式。** --- ## 🚨 根本原因分析 ### `isoWeekday()` 是 `dayjs` 的 **内置方法**,不需要插件,但: - 有些构建方式(如按需引入)需要你手动导入某些方法 - 有些构建方式(如未正确 tree-shaking)会导致某些方法不存在 --- ## ✅ 解决方案一:确保你使用的是完整版 `dayjs` ### ✅ 正确的引入方式: ```ts import dayjs from 'dayjs' ``` 而不是: ```ts import { dayjs } from 'dayjs' // ❌ 错误写法 import dayjs from 'dayjs/esm' // ❌ 某些 esm 构建可能未正确打包 ``` --- ## ✅ 解决方案二:检查你的构建工具配置(Vite/Webpack) 如果你使用的是按需导入(如 `unplugin-dayjs` 插件)或自动导入工具(如 `unplugin-auto-import`),请确认: - 是否正确配置了 `dayjs` 插件 - 是否将 `isoWeekday` 方法自动导入了 否则你需要手动引入: ```ts import isoWeekday from 'dayjs/plugin/isoWeekday' dayjs.extend(isoWeekday) ``` ⚠️ 但注意:`isoWeekday` 是内置方法,**不需要**额外导入插件,如果你看到这个错误,说明你当前的 `dayjs` 版本或构建方式有问题。 --- ## ✅ 最保险的修复方式(确保完整引入) ### 修改你的引入方式为: ```ts import dayjs from 'dayjs' ``` 然后使用: ```ts const firstDayOfWeek = dayjs(currentMonth.value).startOf('month').isoWeekday(1) ``` --- ## ✅ 示例:完整修复后的代码 ```ts import dayjs from 'dayjs' let firstDayOfWeek if (props.selectDate) { const selectedDay = dayjs(props.selectDate) if (selectedDay.isSame(currentMonth.value, 'month')) { firstDayOfWeek = dayjs(currentMonth.value).startOf('month').isoWeekday(1) } else { firstDayOfWeek = dayjs(currentMonth.value).startOf('month').isoWeekday(1) } } else { firstDayOfWeek = dayjs(currentMonth.value).startOf('month').isoWeekday(1) } ``` --- ## ✅ 额外验证:如何确认你当前的 `dayjs` 是否支持 `isoWeekday` 你可以在控制台打印: ```ts console.log(dayjs().isoWeekday) ``` 如果输出: ``` undefined ``` 说明你的 `dayjs` 没有正确加载 `isoWeekday` 方法,**必须检查你的引入方式和构建配置。** --- ## ✅ 小结 | 问题 | 原因 | 解决方法 | |------|------|----------| | `isoWeekday is not a function` | `dayjs` 引入方式错误或构建配置问题 | 使用完整引入 `import dayjs from 'dayjs'` | | `currentMonth.value` 未正确包装 | 未确保它是 `dayjs` 实例 | 使用 `dayjs(currentMonth.value)` 包装 | | 按需加载插件错误 | 误以为 `isoWeekday` 是插件 | 它是内置方法,不需要插件 | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值