Skip to content

Commit dd13585

Browse files
authored
Merge pull request #82 from tronsha/feature/v-bind
Fix named slots
2 parents 4bb2141 + 0f143fd commit dd13585

File tree

5 files changed

+39
-2
lines changed

5 files changed

+39
-2
lines changed

src/Compiler.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,7 +1310,9 @@ protected function handleSlots(DOMElement $node): void
13101310
$slotFallback = $node->hasChildNodes() ? $this->innerHtmlOfNode($node) : null;
13111311

13121312
$slotName = Slot::SLOT_PREFIX;
1313-
$slotName .= $node->getAttribute('name') ? $node->getAttribute('name') : Slot::SLOT_DEFAULT_NAME;
1313+
$slotName .= $node->getAttribute('name')
1314+
? str_replace('-', '_', $node->getAttribute('name'))
1315+
: Slot::SLOT_DEFAULT_NAME;
13141316
$slotFallbackKey = $slotName . '_fallback';
13151317

13161318
if ($slotFallback) {
@@ -1344,7 +1346,7 @@ protected function handleNamedSlotsInclude(DOMNode $node, Component $usedCompone
13441346
if ($childNode instanceof DOMElement && $childNode->tagName === 'template') {
13451347
foreach ($childNode->attributes as $attribute) {
13461348
if ($attribute instanceof DOMAttr && preg_match('/v-slot(?::([a-z0-9_-]+)?)/i', $attribute->nodeName, $matches)) {
1347-
$slotName = $matches[1] ?? Slot::SLOT_DEFAULT_NAME;
1349+
$slotName = $matches[1] ? str_replace('-', '_', $matches[1]) : Slot::SLOT_DEFAULT_NAME;
13481350
$this->addSlot($slotName, $childNode, $usedComponent);
13491351
$removeNodes[] = $childNode;
13501352
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div class="container {{ class|default('') }}" style="{{ style|default('') }}">
2+
{{ slot_foo_bar|default('') }}
3+
</div>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<template>
2+
<div class="container">
3+
<slot name="foo-bar" />
4+
</div>
5+
</template>
6+
<script>
7+
export default {
8+
name: 'BaseLayout',
9+
};
10+
</script>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div class="{{ class|default('') }}" style="{{ style|default('') }}">
2+
{% set slot_foo_bar_value %}baz{% endset %}
3+
{% set slot_default_value %}{% endset %}
4+
{% include "/templates/ChildComponent.twig" with { 'slot_foo_bar': slot_foo_bar_value, 'slot_default': slot_default_value, 'class': "", 'style': "" } %}
5+
</div>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<template>
2+
<div>
3+
<ChildComponent>
4+
<template v-slot:foo-bar>
5+
baz
6+
</template>
7+
</ChildComponent>
8+
</div>
9+
</template>
10+
<script>
11+
export default {
12+
name: 'ComponentWithSlot',
13+
component: {
14+
ChildComponent,
15+
}
16+
};
17+
</script>

0 commit comments

Comments
 (0)