102 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			102 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Mixins | ||
|  | --- | ||
|  | 
 | ||
|  | ## Mixins
 | ||
|  | 
 | ||
|  | A constant problem is that we use some small functions in a lot of Vue components.  Instead of copying them into each of them, we can create mixins. Those can be included and will then be merged into the current component. | ||
|  | 
 | ||
|  | ### Examples
 | ||
|  | 
 | ||
|  | Let's look at the following example: | ||
|  | 
 | ||
|  | We see here that the mixin is merged into the context of the Vue Component, data of the mixin will be merged as well. | ||
|  | ```javascript | ||
|  | var myMixin = { | ||
|  |   methods: { | ||
|  |     hello: function(name) { | ||
|  |       return "Hello " + name; | ||
|  |     } | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | new Vue({ | ||
|  |   mixins: [myMixin], | ||
|  |   created: function() { | ||
|  |     console.log(this.hello("John")); | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | // this will return print: Hello John | ||
|  | ``` | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var myMixin = { | ||
|  |   created: function() { | ||
|  |     console.log("running mixin constructor"); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | Here we see that the constructor of the mixin is always executed before that of the component. | ||
|  | new Vue({ | ||
|  |   mixins: [myMixin], | ||
|  |   created: function() { | ||
|  |     console.log("running component constructor"); | ||
|  |   } | ||
|  | }) | ||
|  | // this will print: | ||
|  | // running mixin constructor | ||
|  | // running component constructor | ||
|  | ``` | ||
|  | 
 | ||
|  | Here we see that the Component will override the definitions in the mixin if there is a conflict. | ||
|  | ```javascript | ||
|  | var myMixin = { | ||
|  |   methods: { | ||
|  |     foo: { | ||
|  |       console.log('mixin foo'); | ||
|  |     }, | ||
|  |     bar: { | ||
|  |       console.log('mixin bar'); | ||
|  |     } | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | var comp = new Vue({ | ||
|  |   mixins: [myMixin], | ||
|  |   methods: { | ||
|  |     bar: function() { | ||
|  |       console.log('component bar'); | ||
|  |     } | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | comp.foo(); // prints "mixin foo" | ||
|  | comp.bar(); // prints "component bar" | ||
|  | ``` | ||
|  | 
 | ||
|  | In this case we can use it to make a global readOnly Variable | ||
|  | ```javascript | ||
|  | // use global mixins carefully | ||
|  | Vue.mixin({ | ||
|  |   data: function() { | ||
|  |     return { | ||
|  |       get greeting() { | ||
|  |         return "World"; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | Vue.component('page-greeting', { | ||
|  |   props: , | ||
|  |   template: ` | ||
|  |     <div> | ||
|  |       <h1> | ||
|  |         Hello {{ greeting }} | ||
|  |       </h1> | ||
|  |     </div> | ||
|  |   ` | ||
|  | }); | ||
|  | ``` |