我正在尝试创建一个Angular组件并转换组件的内部HTML,但内部HTML的标记似乎没有编译。我的用例是该组件具有我想以多种方式使用的属性绑定,因此模板永远不会完全相同。
例如,假设我有以下简单的控制器:
class ComponentCtrl {
$onInit() {
this.variable = 'hello world';
}
}
let MyComponent = {
controller: ComponentCtrl
};
app.component('myComponent', MyComponent);
我想要以下HTML:
<my-component>
<div style="color: green;">{{ $ctrl.variable }}</div>
</my-component>
<my-component>
<div style="color: red;">{{ $ctrl.variable }}</div>
</my-component>
渲染为:
<div style="color: green;">hello world</div>
<div style="color: red;">hello world</div>
但是,现在它只渲染为:
<div style="color: green;"></div>
<div style="color: red;"></div>
没有评估标记。
我做错了吗?
答案 0 :(得分:0)
你是否在html的{{ }}
内写了正确的控制器名称?你写了controller: ComponentCtrl
然后{{ $ctrl.variable }}
。它看起来必须具有相同的名称
答案 1 :(得分:0)
默认情况下不进行转换,您必须在组件上指定必须进行转换。此外,您没有在您的模板上指定它应该被捕获的位置。因此,您的组件应如下所示:
let MyComponent = {
transclude: true, // tell angular to transclude it
template: '<ng-transclude></ng-transclude>', // tell where it will be transcluded
controller: ComponentCtrl
};
app.component('myComponent', MyComponent);
但是,如何在评论中说出,组件范围始终是孤立的。因此,您无法从组件外部访问{{ $ctrl.variable }}
。
答案 2 :(得分:0)
我认为问题来自{{ $ctrl.variable }}
。实际上$ ctrl尝试链接父控制器而不是组件的控制器。
如果您想与组件的控制器进行交互,则需要使用一些参数。
答案 3 :(得分:0)
被排除的内容的作用域具有$ parent属性,该属性始终指向宿主组件的作用域。
所以您可以做这样的事情-
form = document.createElement("form");
form.action = url;
form.method = verb;
form.target = target || "_blank";
if (_data) {
var data = _data.split("&")
for (var key = 0; key < data.length; key++) {
var input = document.createElement("textarea");
input.name = data[key].split("=")[0];
input.value = data[key].split("=")[1];
form.appendChild(input);
}
}
form.style.display = 'none';
document.body.appendChild(form);
form.submit();
使用$ parent属性的插入链接-http://run.plnkr.co/preview/ckdwiuzlb00073b661a7blt3f/