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>
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
Ja, 'ersetzbar' ist ein Aurelia-spezifisches Konzept, bietet aber mehr Funktionalität, wenn es benötigt wird. –
@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. –