1. 程式人生 > 其它 >Vue 中plugins外掛的使用

Vue 中plugins外掛的使用


Vue 中plugins外掛的使用


1:說明

/*
## 外掛

1. 功能:用於增強Vue

2. 本質:包含install方法的一個物件,install的第一個引數是Vue,第二個以後的引數是外掛使用者傳遞的資料。

3. 定義外掛:

    ```js
    物件.install = function (Vue, options) {
        // 1. 新增全域性過濾器
        Vue.filter(....)

        // 2. 新增全域性指令
        Vue.directive(....)

        // 3. 配置全域性混入(合)
        Vue.mixin(....)

        // 4. 新增例項方法
        Vue.prototype.$myMethod = function () {...}
        Vue.prototype.$myProperty = xxxx
    }
    ```

4. 使用外掛:```Vue.use()```



*/


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;

// 引入外掛
import plugins from './plugins' //應用外掛 Vue.use(plugins) // 建立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中的 plugins外掛</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;
   }

plugins.js


/*
## 外掛

1. 功能:用於增強Vue

2. 本質:包含install方法的一個物件,install的第一個引數是Vue,第二個以後的引數是外掛使用者傳遞的資料。

3. 定義外掛:

    ```js
    物件.install = function (Vue, options) {
        // 1. 新增全域性過濾器
        Vue.filter(....)

        // 2. 新增全域性指令
        Vue.directive(....)

        // 3. 配置全域性混入(合)
        Vue.mixin(....)

        // 4. 新增例項方法
        Vue.prototype.$myMethod = function () {...}
        Vue.prototype.$myProperty = xxxx
    }
    ```

4. 使用外掛:```Vue.use()```



*/

export default{
    /* Vue入參 為vue 物件的構造器 */
    install(Vue){
        console.log("@@@@@@@@@@@@@@@@@@@@@@install@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",Vue);
        //全域性過濾器
        Vue.filter('mySlice',function(value){
            return value.slice(0,4)
        }) ;
        //全域性自定義指令
        Vue.directive("fbind",{
            //指令與元素成功繫結時(一上來)
            bind(element,binding){
                //console.log("fbind.bind",this);//注意此處的this是window
                element.value = binding.value;
            },
            //指令所在元素被插入頁面時
            inserted(element,binding){
                //console.log("fbind.inserted",this);//注意此處的this是window
                element.focus();
            },
            //指令所在的模板被重新解析時
            update(element,binding){
                //console.log("fbind.update",this);//注意此處的this是window
                element.value = binding.value;
            }
        })
        Vue.directive('big1',function(element,binding){
            //console.log('big1',this);//注意此處的this是window
            element.innerText=binding.value * 1000;
        });
        // 全域性混入
        Vue.mixin({
            data () {
                return {
                    x:100,
                    y:100
                }
            }
        })
        // 給Vue原型上新增1個方法
        Vue.prototype.hello=()=>{alert('你好啊!')}

    }

}


Student.vue

<!--

 -->
<template>
    <div  class="schoolClassStyle">
      <h1  style="color:red">{{msg}}</h1>
      <h2  >學生名稱:{{name}}</h2>
      <h2>學生性別:{{sex}}</h2>
      <input type="text" v-fbind:value="name"  style="margin-left:10px;"/><span style="color:dimgrey;font-size: 9px;padding: 20px;margin-left: 20px;">測試外掛的全域性繫結 </span>
      <button @click="clickHelloInfo">點選測試外掛的屬性hello方法</button>
      <br/>
    </div>
</template>

  <script>
      export default {
        name:'Student',
        data () {
          return {
            msg:'學生資訊',
            name:'向北',
            sex:'男'
          }
        },
        methods:{
          clickHelloInfo(){
            this.hello()
          }
        }

      }
  </script>

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

School.vue

<!--

 -->
<template>
    <div  class="schoolClassStyle">
      <h1  style="color:red">{{msg}}</h1>
      <h2  >學校名稱:{{name | mySlice}}<span style="color:dimgrey;font-size: 9px;padding: 20px;margin-left: 20px;">      測試外掛中全域性管道符</span></h2><!-- 給學校名稱屬性name 增加1個 mySlice的過濾器屬性 -->
      <h2>學校地址:{{address}}</h2>
    </div>
</template>

  <script>
      export default {
        name:'School',
        data () {
          return {
            msg:'學校資訊',
            name:'華南師範大學',
            address:'廣州市天河區中山大道西55號'
          }
        },

      }
  </script>

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
















4:介面效果圖