1. 程式人生 > 其它 >Vue 中 的 mixin 混入(合)

Vue 中 的 mixin 混入(合)

Vue 中 的 mixin 混入(合)


1:說明


/*
## mixin(混入)

1. 功能:可以把多個元件共用的配置提取成一個混入物件

2. 使用方式:

    第一步定義混合:

    ```
    {
        data(){....},
        methods:{....}
        ....
    }
    ```

    第二步使用混入:

    ​	全域性混入:```Vue.mixin(xxx)```
    ​	區域性混入:```mixins:['xxx']	```



*/




2:程式碼結構


3:程式碼內容


vue.config.js


const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave:false /*關閉語法檢查*/
})



main.js

 //引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//關閉Vue生產提示
Vue.config.productionTip=false;
 //全域性引用 minix
 import { mixinGlobalData ,mininGlobalData2} from "@/mixin
"; Vue.mixin(mixinGlobalData); Vue.mixin(mininGlobalData2); // 建立Vm const vm = new Vue( { el:'#app', render: (h) => h(App) });



index.html

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <!-- 針對ie瀏覽器的一個特殊配置,含義是讓ie瀏覽器以最高的渲染級別進行渲染介面 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 開啟移動端理想視口 --> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <!-- 配置頁籤的圖示 --> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <!-- 配置網頁的標題:找 package.json檔案裡的 "name": "vue_test" 值 --> <title><%= htmlWebpackPlugin.options.title %></title> </head> <body> <!-- 如果瀏覽器不支援js,則該標籤的元素裡的內容將會被渲染 --> <noscript> <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <!-- 容器 --> <div id="app"></div> <!-- built files will be auto injected --> </body> </html>





App.vue

 <!--

 -->

<template>
  <div>
    <hr/>
    <div class="divCss">
        <h1 class="h1Css">Vue中的 minix屬性</h1>
        <hr/>
        <!-- 呼叫元件,傳遞資料 -->
        <School/>
        <hr/>
        <Student />
        <hr/>

    </div>

  </div>
</template>
<script>

    import School from './components/School.vue';
    import Student from './components/Student.vue';


    export default {
        name:'App',
        components:{
            Student,
            School
        },
    }
</script>

<style>
   .divCss{
        background-color: chocolate;
        margin: auto;
        padding: 20px;
   }
   .h1Css{
        font-size: 36px;
        color: white;
   }
</style>




Student.vue

<!-- --> <template> <div class="schoolClassStyle"> <h1 style="color:red">{{msg}}</h1> <h2 @click="showName">學生名稱:{{name}}</h2> <h2>學生性別:{{sex}}</h2> </div> </template>

  <script>
      //引入一個混合 mixin
      import { mixin,mixinData } from '@/mixin';
      export default {
        name:'Student',
        data () {
          return {
            msg:'學生資訊',
            name:'向北',
            sex:'男'
          }
        },
        //配置混合物件,可以配置多個
        mixins:[mixin,mixinData]

      }
  </script>
  <style>
    .schoolClassStyle{
      background-color: aquamarine;
    }
  </style>





School.vue

<!--

 -->
<template>
    <div  class="schoolClassStyle">
      <h1  style="color:red">{{msg}}</h1>
      <h2 @click="showName">學校名稱:{{name}}</h2>
      <h2>學校地址:{{address}}</h2>
    </div>
</template>
  <script>
      //引入一個混合 mixin
      import { mixin ,mixinData} from '@/mixin';
      export default {
        name:'School',
        data () {
          return {
            msg:'學校資訊',
            name:'華南',
            address:'廣州市天河區中山大道西55號'
          }
        },
        //配置混合物件,可以配置多個
        mixins:[mixin,mixinData]

      }
  </script>
  <style>
    .schoolClassStyle{
      background-color: aquamarine;
    }
  </style>




minix.js


 export  const mixin ={
    methods: {
        showName(){
          alert(this.name);
        }
      },

}

export const mixinData={
    data () {
        return {
            x:100,
            y:100
        }
    }
}


export const mixinGlobalData={
    data () {
        return {
            g_x:100,
            g_y:100
        }
    }
}

export const mininGlobalData2={
    data () {
        return {
            g_m:100,
            g_n:100
        }
    }
}





4:執行效果