2016-11-03 3 views
3

Wenn ich ein eigenes Element wie dieses:Aurelia - Referenz benutzerdefinierte Element View-Modell innerhalb des Schlitzes

<template> 
    <mycomponent> 
     Test 
     ${name} 
    </mycomponent> 
</template> 
:

export class mycomponent { 
    constructor() { 
     this.name = 'John Doe'; 
    } 
} 

<template> 
    My component 
    <slot></slot> 
</template> 

Und verwenden Sie diese Komponente in einer anderen Ansicht (I das benutzerdefinierte Element global registriert)

Ist es möglich, in diesem Bereich auf das Ansichtsmodell mycomponent zuzugreifen? Wie zum Beispiel Drucken seiner Eigenschaft name?

EDIT So, hier ist meine letzte Lösung: gist my solution

Ich legte den austauschbaren Teil in meinem benutzerdefinierten Element:

<template> 
    <template replaceable part="content"></template> 
</template> 

und dann process Attribut auf dem View-Modell:

import { processContent } from 'aurelia-framework'; 

@processContent(replacePart) 
export class MyComponent { 
    name = "John Doe"; 
} 

function replacePart(compiler, resources, node){ 
    node.innerHTML = `<template replace-part="content">${node.innerHTML}</template>`; 
    return true; 
} 

So funktioniert es mehr wie ein Steckplatz mit sauberer Syntax:

<h4>Component 1</h4> 
<my-component> 
    <div>One name</div> 
    <strong>${name}</strong> 
</my-component> 

Antwort

3

Soweit ich weiß, kann es nicht mit Slots erreicht werden.

Allerdings hat Aurelia eine Funktion replaceable parts: [Blog post]. Dies passt möglicherweise besser zu Ihren Anforderungen.

Demo: https://gist.run/?id=dcffe2afcb1eee1777e9b0d9f7366d28

Edit: HUB docs: [Cheat Sheet/Template Parts]

+0

Nizza Antwort. Einfacher Weg, um mein Ziel zu erreichen. Ich überlegte, ob ich versuchen sollte, den Inhalt aus dem Slot zu holen und ihn dann manuell mit dem View-Compiler zu kompilieren, aber das würde das Problem vielleicht komplizierter als nötig machen. Danke vielmals. – John

+0

Ja, 'ersetzbar' ist ein Aurelia-spezifisches Konzept, bietet aber mehr Funktionalität, wenn es benötigt wird. –

+1

@AshleyGrant: Es ist in der Tat eine bemerkenswerte Funktion. Ich wollte sagen, dass es nicht im HUB dokumentiert ist, aber im Spickzettel gefunden wurde. :) Die Antwort wurde aktualisiert, um auch diese offizielle Quelle zu haben. –

Verwandte Themen