vue之.sync修饰符

怼烎@ 2023-06-09 13:27 77阅读 0赞

根据VUE官方文档所述,.sync修饰符用来prop双向绑定,而.sync修饰符类似v-model,只是一个语法糖
在这里插入图片描述
先看下放代码,看一下用法,实现了prop的双向绑定:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>vue-sync</title>
  8. <script src="https://cdn.bootcss.com/vue/2.4.2/vue.js"></script>
  9. </head>
  10. <body>
  11. <div id="app">
  12. <my-input :show.sync='checked'></my-input>
  13. <div>{ { checked}}</div>
  14. </div>
  15. </body>
  16. <script>
  17. Vue.component('my-input', {
  18. props: ['show'],
  19. template: `<div><button @click='add'>加1</button></div>`,
  20. data() {
  21. return {
  22. value: this.show
  23. }
  24. },
  25. methods: {
  26. add() {
  27. this.$emit('update:show', ++this.value);
  28. }
  29. }
  30. })
  31. var vm = new Vue({
  32. el: '#app',
  33. data: {
  34. checked: 0
  35. },
  36. watch: {
  37. checked(newVal, oldVal) {
  38. console.log(this.checked)
  39. }
  40. }
  41. })
  42. </script>
  43. </html>

为什么要这么写,是因为父组件传值给子组件,子组件不能改变父组件传递过来的值,这也是上述代码中要在子组件定义一个value,用来承接父组件传递过来的值的原因。而不用.sync修饰符的话要改变父组件的值,那么就要在父组件使用方法改变,如下方代码所示:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>vue-sync</title>
  8. <script src="https://cdn.bootcss.com/vue/2.4.2/vue.js"></script>
  9. </head>
  10. <body>
  11. <div id="app">
  12. <my-input :show='checked' @update-value='changeChecked'></my-input>
  13. <div>{ { checked}}</div>
  14. </div>
  15. </body>
  16. <script>
  17. Vue.component('my-input', {
  18. props: ['show'],
  19. template: `<div><button @click='add'>加1</button></div>`,
  20. data() {
  21. return {
  22. value: this.show
  23. }
  24. },
  25. methods: {
  26. add() {
  27. this.$emit('update-value', ++this.value)
  28. }
  29. }
  30. })
  31. var vm = new Vue({
  32. el: '#app',
  33. data: {
  34. checked: 0
  35. },
  36. methods: {
  37. changeChecked(val) {
  38. this.checked = val
  39. }
  40. },
  41. watch: {
  42. checked(newVal, oldVal) {
  43. console.log(this.checked)
  44. }
  45. }
  46. })
  47. </script>
  48. </html>

两者相比较就可以看出差别,所以开头说.sync只是一个类似v-model的语法糖。

注意事项:

1).注意带有 .sync 修饰符的 v-bind 不能和表达式一起使用 (例如 v-bind:title.sync=”doc.title + ‘!’” 是无效的)。取而代之的是,你只能提供你想要绑定的属性名,类似 v-model。 这是官方文档所述,就是说sync后面不能跟表达式
2).sync还有一个用法,也算简写

  1. <text-document v-bind.sync="doc"></text-document>
  2. // doc是一个对象,例如 doc:{name:'sads',age:21} 等价于下方
  3. <text-document v-bind:name.sync="doc.name" v-bind:age.sync="doc.age"></text-document>

发表评论

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

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

相关阅读

    相关 vue.sync修饰符

    根据VUE官方文档所述,.sync修饰符用来prop双向绑定,而.sync修饰符类似v-model,只是一个语法糖 ![在这里插入图片描述][watermark_type_

    相关 .sync修饰符

    第一步:先用一句话解释 .sync修饰符可以实现子组件与父组件的双向绑定,并且可以实现子组件同步修改父组件的值。 第二步:具体解释 一般情况下,想要实现父子组件间