规范组件选项的顺序

  1. export default {
  2. name: '',
  3. parent: null,
  4. extends: null,
  5. minxins: [],
  6. components: {},
  7. inheritAttrs: false,
  8. model: {},
  9. props: {},
  10. data () {
  11. return {}
  12. },
  13. computed: {},
  14. watch: {},
  15. // 生命周期钩子,按调用顺序编写
  16. beforeCreate () {},
  17. ...,
  18. destroyed () {},
  19. methods: {},
  20. directives: {},
  21. filters: {},
  22. // 使用render函数时,置于末尾
  23. render () {}
  24. }

使用 $attrs 与 $listeners 实现多层嵌套传递

A 中对 C 的 props 赋值,监听 C 的 emit 事件
image.png

  • 使用 vuex 来进行数据管理
  • 自定义 vue bus 事件总线:破坏了代码的链式调用,逻辑分散,出现问题难以定位
  • 使用 B 做为中转站,如果需要传递的事件和属性较多,会导致代码繁琐,难以维护 ```javascript // A 组件
  1. ```javascript
  2. // B 组件
  3. <template>
  4. <div>
  5. <h3>组件B</h3>
  6. <C v-bind="$attrs" v-on="$listeners"></C>
  7. </div>
  8. </template>
  9. <script>
  10. import C from "./C";
  11. export default {
  12. components: { C },
  13. };
  14. </script>
  1. // C 组件
  2. <template>
  3. <div>
  4. <h5>组件C</h5>
  5. <input v-model="myc" @input="hInput" />
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. props: { myData: { String } },
  11. created() {
  12. this.myc = this.myData; // 在组件A中传递过来的属性
  13. console.info(this.$attrs, this.$listeners);
  14. },
  15. methods: {
  16. hInput() {
  17. this.$emit("changeMyData", this.myc); // // 在组件A中传递过来的事件
  18. }
  19. }
  20. };
  21. </script>

参考资料

  1. Vue 使用 $attrs 与 $listeners 实现多层嵌套传递