前端菜戌鲲 2021-04-22 17:59 采纳率: 100%
浏览 154
已采纳

为什么我这个函数在created钩子里调用是正常的,在mounted钩子里就不行?

<template>
  <div>
    <div class="block">
      <span class="demonstration">默认 click 触发子菜单</span>
      <el-cascader
        v-model="value"
        :options="newOptions"
        @change="handleChange"
      />
    </div>

  </div>
</template>

<script>
import mixin from './mixin'
export default {
  name: 'Home',
  mixins: [mixin],
  data() {
    return {
      value: [],
      newOptions: []
    }
  },
  mounted() {
    this.filterOptions1(this.newOptions, this.options)
  },
  created() {
    // this.filterOptions1(this.newOptions, this.options)
  },
  methods: {
    handleChange() {
      console.log('改变了')
    },
    filterOptions() {
      const str = JSON.stringify(this.options)
      console.log(str)
      let str1 = str.replace(/(city|area)/g, (s) => {
        return 'children'
      })
      str1 = str.replace(/name/g, (s) => {
        return 'label'
      })
      console.log(str1)
    },
    // 想要的结构  [{label:'',value:'',children:[]}]
    // 结构 [{name:'',city:[{name:'',area:['','','']}]}]
    filterOptions1(newObj, obj) {
      for (const key in obj) {
        const label = obj[key]['name']
        const citys = obj[key]['city']
        const newCitys = []
        for (const city in citys) {
          const cityLabel = citys[city]['name']
          const areas = citys[city]['area']
          const newAreas = []
          areas.forEach((item, index) => {
            const newArea = { label: item, value: item }
            newAreas.push(newArea)
          })
          const c = { label: cityLabel, value: cityLabel, children: newAreas }
          newCitys.push(c)
        }
        newObj[key] = { label, value: label, children: newCitys }
      }
    }
  }
}
</script>

<style>

</style>
  • 写回答

7条回答 默认 最新

  • 卷腹肌肉侠 2021-04-23 15:06
    关注

    首先,你的options是一个数组,我们知道,对于数组想要实现数据双向绑定直接更改里面的内容是不行的。所以你那个filterOptions1方法本质上是错误的。

    至于为什么在created里有用,而mounted没用,是因为在created里就给数据赋值了,这个赋值是在页面渲染之前,所以你会看到页面渲染成功,但是其实这是个假象,因为这个并不是双向绑定的。你如果用你的filterOptions1方法再给里面的数据做改动处理,你会发现里面的数据还是你created时候的数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分