- Vue.js 2 Web Development Projects
- Guillaume Chau
- 346字
- 2021-07-02 22:34:35
Dynamic component
Now, it is time to put all of these into our overlay component and use the activeOverlay property we defined earlier.
- Add the components and display them with the corresponding value of activeOverlay in the main template:
<overlay v-if="activeOverlay">
<overlay-content-player-turn
v-if="activeOverlay === 'player-turn'" />
<overlay-content-last-play
v-else-if="activeOverlay === 'last-play'" />
<overlay-content-game-over
v-else-if="activeOverlay === 'game-over'" />
</overlay>
We will remove the overlay completely if the activeOverlay property is equal to null.
Before adding the props, we will need to modify the app state in the state.js file with a few getters.
- The first one will return the player object from the currentPlayerIndex property:
get currentPlayer () {
return state.players[state.currentPlayerIndex]
},
- The second one will return the opposing player index:
get currentOpponentId () {
return state.currentPlayerIndex === 0 ? 1 : 0
},
- Finally, the third one will return the corresponding player object:
get currentOpponent () {
return state.players[state.currentOpponentId]
},
- Now, we can add the props to the overlay contents:
<overlay v-if="activeOverlay">
<overlay-content-player-turn
v-if="activeOverlay === 'player-turn'"
:player="currentPlayer" />
<overlay-content-last-play
v-else-if="activeOverlay === 'last-play'"
:opponent="currentOpponent" />
<overlay-content-game-over
v-else-if="activeOverlay === 'game-over'"
:players="players" />
</overlay>
You can test the overlays by setting the activeOverlay property in the browser console:
state.activeOverlay = 'player-turn'
state.activeOverlay = 'last-play'
state.activeOverlay = 'game-over'
state.activeOverlay = null
If you want to test the last-play overlay, you need to specify a valid value to the player lastPlayedCardId property, such as 'catapult' or 'farm'.
Our code is starting to be messy, with three conditionals. Thankfully, there is a special component that can turn itself into any component--it is the component component. You just have to set its is prop to a component name, a component definition object, or even an HTML tag, and it will morph into it:
<component is="h1">Title</component>
<component is="overlay-content-player-turn" />
It's a prop like any other, so we can use the v-bind directive to dynamically change the very nature of the component with a JavaScript expression. What if we used our activeOverlay property to do just that? Are our overlay content components conveniently named with the same 'over-content-' prefix? Take a look:
<component :is="'overlay-content-' + activeOverlay" />
That's it. Now, by changing the value of the activeOverlay property, we will change the component displayed inside the overlay.
- After adding back the props, the overlay should look like this in the main template:
<overlay v-if="activeOverlay">
<component :is="'overlay-content-' + activeOverlay"
:player="currentPlayer" :opponent="currentOpponent"
:players="players" />
</overlay>
Don't worry, unused props won't interfere with the different overlays workings.
- CMDB分步構建指南
- 兩周自制腳本語言
- PyTorch Artificial Intelligence Fundamentals
- C/C++常用算法手冊(第3版)
- Android 應用案例開發大全(第3版)
- 高級語言程序設計(C語言版):基于計算思維能力培養
- Unreal Engine 4 Shaders and Effects Cookbook
- Hands-On Full Stack Development with Go
- “笨辦法”學C語言
- Hands-On GUI Programming with C++ and Qt5
- 軟件體系結構
- Penetration Testing with the Bash shell
- Android智能手機APP界面設計實戰教程
- 軟件設計模式(Java版)
- 算法超簡單:趣味游戲帶你輕松入門與實踐