祖先provide,后代inject,作用是大范围隔N代共享信息。
    provide 选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的 property。
    inject 选项应该是:

    • 一个字符串数组,或
    • 一个对象,对象的 key 是本地的绑定名,value 是:
      • 在可用的注入内容中搜索用的 key (字符串或 Symbol),或
      • 一个对象,该对象的:
        • from property 是在可用的注入内容中搜索用的 key (字符串或 Symbol)
        • default property 是降级情况下使用的 value

    示例
    父组件provide

    1. <template>
    2. <div :class="`app theme-${themeName}`">
    3. <Child1/>
    4. <button>x</button>
    5. </div>
    6. </template>
    7. <script>
    8. import Child1 from "./components/Child1.vue";
    9. export default {
    10. name: "App",
    11. data() {
    12. return {
    13. themeName: "blue", // 'red'
    14. fontSize: "normal" // 'big' | 'small'
    15. };
    16. },
    17. provide(){
    18. return {changeColor: this.changeColor}
    19. },
    20. components: {
    21. Child1
    22. },
    23. methods:{
    24. changeColor(){
    25. if(this.themeName==='blue'){
    26. this.themeName = 'red'
    27. }else{
    28. this.themeName = 'blue'
    29. }
    30. }
    31. }
    32. };
    33. </script>
    34. <style>
    35. .app {
    36. font-family: "Avenir", Helvetica, Arial, sans-serif;
    37. -webkit-font-smoothing: antialiased;
    38. -moz-osx-font-smoothing: grayscale;
    39. text-align: center;
    40. color: #2c3e50;
    41. margin-top: 60px;
    42. }
    43. .app.theme-blue button {
    44. background: blue;
    45. color: white;
    46. }
    47. .app.theme-blue {
    48. color: darkblue;
    49. }
    50. .app.theme-red button {
    51. background: red;
    52. color: white;
    53. }
    54. .app.theme-red {
    55. color: darkred;
    56. }
    57. </style>

    子组件inject

    1. <template>
    2. <div>
    3. <button @click="changeColor">换肤</button>
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. inject:['changeColor']
    9. }
    10. </script>