账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue 自动更新父组件数据的问题
    27
    0

    我又一个父组件A和一个子组件B
    父组件代码

    <div class="item-content">
    <Button
      style="height:40px;"
      type="dashed"
      icon="ios-add"
      @click="addQuestion">添加问题</Button>
    <choose-question
      ref="choosequestion"
      :showchoosequestion="showChooseQuestion"
      :cancelquestion="cancelQuestionId"
      @questionlist="getQuestionList"
      @cancel="addQuestionCancel" />
    <div class="question">
      <span
        v-for="item in addedQuestionList"
        :key="item.id"><em>{{ item.title }}</em>
        <Icon
          type="ios-close"
          color="#666666"
          @click="cancelQuestion(item.id)" />
      </span>
    </div>
      </div>

    子组件choose-question中 是一个iview的table组件 全选表格所有项目并且点击确定的时候会触发questionlist方法 同时把选中的数据传给父组件,父组件更新 addedQuestionList 的值 从而循环展示出来选择的数据。但是现在我只触发全选的时候 父组件就更新了 addedQuestionList 的值 并没有点确定,全选事件里并没有触发questionlist方法,为什么父组件的addedQuestionList值就被改变了?我跟了断点 看到 vue自己执行了 watch.run方法后 数据就变了,可我也没有 watch addedQuestionList这个方法。
    子组件触发全选代码

    select (selection) {
      this.questionData.push(...selection)
      const obj = {}
      const l = this.questionData.reduce((cur, item, index) => {
      if (!obj[item.id]) {
         obj[item.id] = true
         cur.push(item)
       }
      return cur
      }, [])
      this.questionData = l
    }

    子组件点击确定代码

    ok () {
      this.$emit('questionlist', this.questionData)
      this.$emit('cancel', false)
    }

    感谢您的关注,谢谢您的回答。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 只有回憶而已丶 普通会员 1楼

      在 Vue 中,如果你想自动更新父组件的数据,你可以使用 Vue Router。Vue Router 可以帮助你管理路由和状态,从而实现组件间的数据共享。

      以下是一个简单的例子,说明如何使用 Vue Router 和 Vue 自动更新父组件的数据:

      1. 首先,你需要在你的项目中安装 Vue Router。你可以通过npm(Node Package Manager)来安装:

      npm install vue-router

      1. 然后,你需要在你的 src 文件夹中创建一个名为 router.js 的文件,然后添加以下代码:

      ```javascript import Vue from 'vue' import Router from 'vue-router' import Home from './components/Home.vue'

      const routes = [ { path: '/', component: Home } ]

      const router = new Router({ routes })

      export default router ```

      这里,我们定义了一个路由 /,并创建了一个名为 Home 的组件作为子路由。

      1. 在你的 src/components 文件夹中创建一个名为 Home.vue 的文件,然后添加以下代码:

      ```html

      Home

      ```

      这里,我们定义了一个简单的 Vue 组件,它将显示一个 h1 标签和一个 router-view

      1. 在你的 src/App.vue 文件中,你需要在 data 属性中设置一个变量来存储父组件的路由数据:

      javascript export default { data() { return { routeData: null } }, created() { this.fetchRouteData() }, methods: { fetchRouteData() { this.routeData = this.$router.$route.data } } }

      这里,我们定义了一个名为 routeData 的变量,并在 created 生命周期钩子中设置它的值。在 fetchRouteData 方法中,我们将获取父组件的路由数据并将其存储在 routeData 变量中。

      1. 最后,你需要在你的 main.js 文件中注册 App.vue 组件,并使用 this.$router.push 方法来导航到父组件:

      ```javascript import Vue from 'vue' import App from './App.vue' import router from './router'

      new Vue({ router, render: h => h(App) }).$mount('#app') ```

      这里,我们首先导入 Vue 和 App.vue,然后在 router 中注册 App.vue 组件。最后,我们使用 this.$router.push 方法来导航到父组件。

      现在,如果你在父组件中改变数据,Vue Router 将自动更新子组件,并显示新的数据。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部