- Vue.js 2 Web Development Projects
- Guillaume Chau
- 330字
- 2021-07-02 22:34:34
Content distribution with slots
It would be very convenient if we could put contents inside the overlay component in the main template, like this:
<overlay>
<overlay-content-player-turn />
</overlay>
We would encapsulate additional layout and logic inside the overlay component while still being able to put any content inside. This is done through a special element--the <slot>.
- Let's create our overlay component with two p elements:
Vue.component('overlay', {
template: `<p class="overlay">
<p class="content">
<!-- Our slot will be there -->
</p>
</p>`,
})
- Add a click event listener on the .overlay p, which calls the handleClick method:
<p class="overlay" @click="handleClick">
- Then, add the mentioned method where we emit a custom 'close' event:
methods: {
handleClick () {
this.$emit('close')
},
},
This event will be helpful to know when to switch from one overlay to the next at the start of the turn.
- Now, put a <slot> element inside the .content p:
template: `<p class="overlay" @click="handleClick">
<p class="content">
<slot />
</p>
</p>`,
Now, if we put something between the overlay tags when using our component, it will be included in the DOM and replace the <slot> tag. For example, we could do this:
<overlay>
Hello world!
</overlay>
Also, it will render like this in the page:
<p class="overlay">
<p class="content">
Hello world!
</p>
</p>
It works with anything, so you can also put HTML or Vue components, and it will still work the same way!
- The component is ready to be used in the main template, so add it at the end:
<overlay>
Hello world!
</overlay>
Each of the three overlay contents will be a separate component:
- overlay-content-player-turn shows the beginning of the turn
- overlay-content-last-play displays the last card played by the opponent
- overlay-content-game-over shows when the game is over
Before ping into these, we need a bit more data about the two players in our state.
- Go back to the state.js file and add the following properties for each player:
// Starting stats
food: 10,
health: 10,
// Is skipping is next turn
skipTurn: false,
// Skiped turn last time
skippedTurn: false,
hand: [],
lastPlayedCardId: null,
dead: false,
You should now have two items in the players array with the same properties, expect for the player names.
- SQL Server 2016從入門到精通(視頻教學超值版)
- 神經網絡編程實戰:Java語言實現(原書第2版)
- Learning ArcGIS for Desktop
- Swift語言實戰精講
- 從Java到Web程序設計教程
- CRYENGINE Game Development Blueprints
- 算法圖解
- Unity 2017 Game AI Programming(Third Edition)
- 深入解析Java編譯器:源碼剖析與實例詳解
- Hack與HHVM權威指南
- Qt 5.12實戰
- Java Web動態網站開發(第2版·微課版)
- Building Apple Watch Projects
- 你必須知道的.NET(第2版)
- Laravel 5.x Cookbook