我有一个可以像
那样调用的自定义Aurelia测试
这可以在网站的html页面中正常使用。
但是,我有一些使用这些自定义返回html的restful服务 元素。然后我使用这个html作为我的Aurelia网站的内容。此时,自定义元素将不会执行。这有一种方法告诉Aurelia在显示之前处理返回的html中的自定义元素吗?
由于
答案 0 :(得分:0)
您可以使用<compose>
和InlineViewStrategy
的组合。
Gist演示:https://gist.run/?id=bd1122986ba8dabde8111c3b4ab6df6f
这里的主要思想是拥有一个自定义组件,它可以使用从返回的JSON结果中提取的html。使用InlineViewStrategy
,可以即时获取功能齐全的模板解析器并向其提供<compose>
。
这样,html块将被视为应用程序的任何其他部分。它也可以包含其他自定义元素。
基本上,它只是一个扩展的<compose>
,但对于view
可绑定属性,它接受一个字符串变量而不是一个视图路径。
<强> part.html 强>
<template>
<compose view.bind="viewStrategy" model.bind="model"></compose>
</template>
<强> part.js 强>
import {inject, bindable, InlineViewStrategy} from 'aurelia-framework';
import {Api} from './api'; // REST of your magic goes here
@inject(Api)
export class Part {
// template string
@bindable view;
// data model
@bindable model;
// rest api url (optional)
@bindable templateHref;
constructor(api) {
this.api = api;
}
// render html template
viewChanged() {
if (this.view) {
this.viewStrategy = new InlineViewStrategy(this.view);
}
}
// load html from remote url (optional feature)
templateHrefChanged() {
if (this.templateHref) {
this.api
.loadTemplate(this.templateHref)
.then(result => {
this.view = result.content;
});
}
}
}
远程api处理
// api call goes here
// JSON result could be similar to this
result = {
content:
`<template>
<require from="./custom-part"></require>
<h2>${model.title}</h2>
<custom-part title.bind="model.title"></custom-part>
<p>${model.content}</p>
</template>`,
error: false
};
this.testView = result.content;
<强> app.html 强>
从变量
加载模板字符串 <part view.bind="testView" model.bind="testModel"></part>
从网址加载模板
<part template-href="http://remote-api-url" model.bind="{title: 'Another...', content: '...'}"></part>
从不存在的网址加载模板
<part template-href="./remote-api-notfound" model.bind="testModel"></part>
我希望它有所帮助。