- 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.
- LabVIEW Graphical Programming Cookbook
- Debian 7:System Administration Best Practices
- Rust編程:入門、實戰與進階
- Vue.js快跑:構建觸手可及的高性能Web應用
- Mastering Concurrency in Go
- Django Design Patterns and Best Practices
- SQL Server 2012數據庫管理與開發項目教程
- JavaScript 程序設計案例教程
- Java EE 7 Performance Tuning and Optimization
- 零基礎趣學C語言
- The Professional ScrumMaster’s Handbook
- Visualforce Developer’s guide
- 智能手機故障檢測與維修從入門到精通
- Moodle 3 Administration(Third Edition)
- Apache Solr PHP Integration