vue 子组件改变父组件的值

Dear 丶 2021-09-12 01:16 404阅读 0赞

项目中遇到,子组件改变选值时,想改变父组件的值,尝试了两种办法,用到的watchcomputed方式,看个人喜爱

第一种:

父组件传入一个方法,子组件的值改变时,调用父组件的方法改变父组件的值

父组件

  1. <level-select :level="form.level" @change="changeValue" />
  2. <script>
  3. import LevelSelect from '@/components/LevelSelect'
  4. export default {
  5. components: { LevelSelect },
  6. data() {
  7. return {
  8. form: {
  9. level: 1
  10. }
  11. }
  12. },
  13. methods: {
  14. changeValue(val) {
  15. this.form.level = val
  16. }
  17. }
  18. }
  19. </script>

子组件

  1. <template>
  2. <div>
  3. <label style="display: inherit;">权限</label>
  4. <el-select v-model="levelSelected" placeholder="请选择" style="width:100%" size="medium">
  5. <el-option
  6. v-for="item in levels"
  7. :key="item.level"
  8. :label="item.name"
  9. :value="item.level"
  10. />
  11. </el-select>
  12. </div>
  13. </template>
  14. <script>
  15. export default {
  16. props: {
  17. level: {
  18. type: Number,
  19. default: 0
  20. }
  21. },
  22. data() {
  23. return {
  24. levels: [
  25. { name: '公开', level: 0 },
  26. { name: '会员可见', level: 1 },
  27. { name: '需要密码', level: 2 },
  28. ]
  29. }
  30. },
  31. computed: {
  32. levelSelected: {
  33. get() {
  34. return this.level
  35. },
  36. set(val) {
  37. this.$emit('change', val)
  38. }
  39. }
  40. }
  41. </script>
  42. <style>
  43. </style>

第二种:

需要用到 .sync,因为想父组件里面简洁一点,所以我选用的是这一种方式。实例如下:

父组件

  1. <level-select :level.sync="form.level" />
  2. <script>
  3. import LevelSelect from '@/components/LevelSelect'
  4. export default {
  5. components: { LevelSelect },
  6. data() {
  7. return {
  8. form: {
  9. level: 1
  10. }
  11. }
  12. }
  13. }
  14. </script>

子组件

  1. <template>
  2. <div>
  3. <label style="display: inherit;">权限</label>
  4. <el-select v-model="levelSelected" placeholder="请选择" style="width:100%" size="medium">
  5. <el-option
  6. v-for="item in levels"
  7. :key="item.level"
  8. :label="item.name"
  9. :value="item.level"
  10. />
  11. </el-select>
  12. </div>
  13. </template>
  14. <script>
  15. export default {
  16. props: {
  17. level: {
  18. type: Number,
  19. default: 0
  20. }
  21. },
  22. data() {
  23. return {
  24. levels: [
  25. { name: '公开', level: 0 },
  26. { name: '会员可见', level: 1 },
  27. { name: '需要密码', level: 2 },
  28. ],
  29. levelSelected: this.level
  30. }
  31. },
  32. watch: {
  33. levelSelected(newVal) {
  34. this.$emit('update:level', newVal);
  35. }
  36. }
  37. }
  38. </script>
  39. <style>
  40. </style>

子组件的权限值改变时,父组件的level也会相应的改变

发表评论

表情:
评论列表 (有 0 条评论,404人围观)

还没有评论,来说两句吧...

相关阅读