Skip to content

Commit a2348a3

Browse files
committed
✅ ref slot with tsx sample
1 parent d6f0713 commit a2348a3

File tree

6 files changed

+61
-4
lines changed

6 files changed

+61
-4
lines changed

layers/common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@fessional/razor-common",
3-
"version": "0.8.1-dev.16",
3+
"version": "0.8.1-dev.17",
44
"description": "common layer for mobile and desktop",
55
"type": "module",
66
"main": "./nuxt.config.ts",

layers/desktop/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@fessional/razor-desktop",
3-
"version": "0.8.1-dev.16",
3+
"version": "0.8.1-dev.17",
44
"description": "desktop layer with vuetify",
55
"type": "module",
66
"main": "./nuxt.config.ts",

layers/mobile/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@fessional/razor-mobile",
3-
"version": "0.8.1-dev.16",
3+
"version": "0.8.1-dev.17",
44
"description": "mobile layer with ionic and capacitor",
55
"type": "module",
66
"main": "./nuxt.config.ts",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@fessional/razor",
3-
"version": "0.8.1-dev.16",
3+
"version": "0.8.1-dev.17",
44
"description": "Use front-end tech (Nuxt/Ts) to build multi-platform from one codebase, suitable for small team and app to write app once, apply almost anywhere.",
55
"type": "module",
66
"files": [
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { defineComponent, computed, type Ref, type SlotsType } from 'vue'
2+
3+
const ModelSlot = defineComponent({
4+
name: 'ModelSlot',
5+
6+
props: {
7+
modelValue: {
8+
type: Number,
9+
default: 0,
10+
},
11+
},
12+
13+
emits: ['update:modelValue'],
14+
15+
slots: Object as SlotsType<{
16+
default: (props: { model: Ref<number> }) => void
17+
}>,
18+
19+
setup(props, { emit, slots }) {
20+
const model = computed({
21+
get: () => props.modelValue,
22+
set: v => emit('update:modelValue', v),
23+
})
24+
25+
return () => (
26+
<div class="border border-solid p-4 border-1">
27+
<div>{ '👶 Child ' + model.value }</div>
28+
{slots.default?.({ model })}
29+
<div
30+
class="border border-solid cursor-pointer p-4 border-1 mt-2"
31+
onClick={() => model.value++}
32+
>
33+
👶 Child ++
34+
</div>
35+
</div>
36+
)
37+
},
38+
})
39+
40+
export type ModelSlot = InstanceType<typeof ModelSlot>
41+
export default ModelSlot

plays/2-play-web/pages/14-model-binding.vue

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,21 @@
2424
</div>
2525
<ModelOld v-model="modelOld" />
2626
</div>
27+
<div class="border border-solid p-2 border-1 flex flex-col gap-2">
28+
<ModelSlot v-model="modelSlot">
29+
<template #default="{ model }">
30+
<div class="border border-solid p-4 border-1">
31+
Parent ModelSlot {{ model }}
32+
</div>
33+
<div class="border border-solid cursor-pointer p-4 border-1" @click="model.value++">
34+
👨🏻 Parent Slot ++
35+
</div>
36+
<div class="border border-solid cursor-pointer p-4 border-1" @click="model.value=model.value+1">
37+
👨🏻 Parent Slot +1
38+
</div>
39+
</template>
40+
</ModelSlot>
41+
</div>
2742
</div>
2843
</template>
2944

@@ -34,4 +49,5 @@ definePageMeta({
3449
3550
const modelNew = shallowRef(1000);
3651
const modelOld = shallowRef(2000);
52+
const modelSlot = shallowRef(2000);
3753
</script>

0 commit comments

Comments
 (0)