diff --git a/20_脚手架/vue_code/04.src_插件/App.vue b/20_脚手架/vue_code/04.src_插件/App.vue
new file mode 100644
index 0000000..197be06
--- /dev/null
+++ b/20_脚手架/vue_code/04.src_插件/App.vue
@@ -0,0 +1,19 @@
+
+  
+    
+    
+  
+
+
+
\ No newline at end of file
diff --git a/20_脚手架/vue_code/04.src_插件/assets/logo.png b/20_脚手架/vue_code/04.src_插件/assets/logo.png
new file mode 100644
index 0000000..f3d2503
Binary files /dev/null and b/20_脚手架/vue_code/04.src_插件/assets/logo.png differ
diff --git a/20_脚手架/vue_code/04.src_插件/components/School.vue b/20_脚手架/vue_code/04.src_插件/components/School.vue
new file mode 100644
index 0000000..f8487cb
--- /dev/null
+++ b/20_脚手架/vue_code/04.src_插件/components/School.vue
@@ -0,0 +1,27 @@
+
+  
+    
学校名称:{{ name | mySlice}}
+    学校地址:{{ address }}
+    
+  
+
+
+
+
diff --git a/20_脚手架/vue_code/04.src_插件/components/Student.vue b/20_脚手架/vue_code/04.src_插件/components/Student.vue
new file mode 100644
index 0000000..5c9795f
--- /dev/null
+++ b/20_脚手架/vue_code/04.src_插件/components/Student.vue
@@ -0,0 +1,21 @@
+
+  
+    
学生名称:{{ name }}
+    学生年龄:{{ age }}
+    
+  
+
+
+
+
diff --git a/20_脚手架/vue_code/04.src_插件/main.js b/20_脚手架/vue_code/04.src_插件/main.js
new file mode 100644
index 0000000..9b213cd
--- /dev/null
+++ b/20_脚手架/vue_code/04.src_插件/main.js
@@ -0,0 +1,20 @@
+// 引入Vue
+import Vue from "vue";
+// 引入App
+import App from "./App";
+// 引入插件
+import plugins from "./plugins"
+
+// 设置Vue
+Vue.config.productionTip = false
+
+// 使用插件
+Vue.use(plugins)
+
+// 实例化Vue
+new Vue({
+    components: {
+        App
+    },
+    render: h => h(App)
+}).$mount('#app')
diff --git a/20_脚手架/vue_code/04.src_插件/plugins.js b/20_脚手架/vue_code/04.src_插件/plugins.js
new file mode 100644
index 0000000..ab8d224
--- /dev/null
+++ b/20_脚手架/vue_code/04.src_插件/plugins.js
@@ -0,0 +1,34 @@
+export default {
+    install(Vue) {
+        // 全局过滤器
+        Vue.filter("mySlice", function (value) {
+            return value.slice(0, 4)
+        })
+
+        //   全局指令
+        Vue.directive("fbind", {
+            bind(element, binding) {
+                element.value = binding.value
+            },
+            inserted(element, binding) {
+                element.focus()
+            },
+            update(element, binding) {
+                element.value = binding.value
+            }
+        })
+
+        //     定义混入
+        Vue.mixin({
+            data() {
+                return {
+                    x: 100,
+                    y: 200
+                }
+            }
+        })
+
+        // 给Vue原型上添加一个方法
+        Vue.prototype.hello = ()=> {alert('Hello')}
+    }
+}
\ No newline at end of file
diff --git a/20_脚手架/vue_code/src/App.vue b/20_脚手架/vue_code/src/App.vue
index ba65631..197be06 100644
--- a/20_脚手架/vue_code/src/App.vue
+++ b/20_脚手架/vue_code/src/App.vue
@@ -9,7 +9,6 @@
 import School from "./components/School.vue";
 import Student from "./components/Student.vue";
 
-
 export default {
   name: "App",
   components: {
diff --git a/20_脚手架/vue_code/src/components/School.vue b/20_脚手架/vue_code/src/components/School.vue
index 028b976..f8487cb 100644
--- a/20_脚手架/vue_code/src/components/School.vue
+++ b/20_脚手架/vue_code/src/components/School.vue
@@ -1,28 +1,27 @@
 
   
-    
学校名称:{{ name }}
+    学校名称:{{ name | mySlice}}
     学校地址:{{ address }}
+    
   
 
 
 
 
diff --git a/20_脚手架/vue_code/src/components/Student.vue b/20_脚手架/vue_code/src/components/Student.vue
index f493a7c..5c9795f 100644
--- a/20_脚手架/vue_code/src/components/Student.vue
+++ b/20_脚手架/vue_code/src/components/Student.vue
@@ -1,14 +1,12 @@
 
   
-    
学生名称:{{ name }}
+    学生名称:{{ name }}
     学生年龄:{{ age }}
+    
   
 
 
 
 
diff --git a/20_脚手架/vue_code/src/main.js b/20_脚手架/vue_code/src/main.js
index 2aab4d0..9b213cd 100644
--- a/20_脚手架/vue_code/src/main.js
+++ b/20_脚手架/vue_code/src/main.js
@@ -1,13 +1,17 @@
+// 引入Vue
 import Vue from "vue";
+// 引入App
 import App from "./App";
+// 引入插件
+import plugins from "./plugins"
 
-import {mixin_method1, mixin_method2} from "@/mixin";
-
-
+// 设置Vue
 Vue.config.productionTip = false
-Vue.mixin(mixin_method1)
-Vue.mixin(mixin_method2)
 
+// 使用插件
+Vue.use(plugins)
+
+// 实例化Vue
 new Vue({
     components: {
         App
diff --git a/20_脚手架/vue_code/src/mixin.js b/20_脚手架/vue_code/src/mixin.js
deleted file mode 100644
index c41bd4f..0000000
--- a/20_脚手架/vue_code/src/mixin.js
+++ /dev/null
@@ -1,17 +0,0 @@
-export const mixin_method1 = {
-    methods: {
-        showName() {
-            alert(this.name)
-        }
-    },
-    mounted() {
-        console.log("欢迎")
-    }
-}
-export const mixin_method2 = {
-    data() {
-        return {
-            msg: "欢迎"
-        }
-    }
-}
\ No newline at end of file
diff --git a/20_脚手架/vue_code/src/plugins.js b/20_脚手架/vue_code/src/plugins.js
new file mode 100644
index 0000000..ab8d224
--- /dev/null
+++ b/20_脚手架/vue_code/src/plugins.js
@@ -0,0 +1,34 @@
+export default {
+    install(Vue) {
+        // 全局过滤器
+        Vue.filter("mySlice", function (value) {
+            return value.slice(0, 4)
+        })
+
+        //   全局指令
+        Vue.directive("fbind", {
+            bind(element, binding) {
+                element.value = binding.value
+            },
+            inserted(element, binding) {
+                element.focus()
+            },
+            update(element, binding) {
+                element.value = binding.value
+            }
+        })
+
+        //     定义混入
+        Vue.mixin({
+            data() {
+                return {
+                    x: 100,
+                    y: 200
+                }
+            }
+        })
+
+        // 给Vue原型上添加一个方法
+        Vue.prototype.hello = ()=> {alert('Hello')}
+    }
+}
\ No newline at end of file