Nir*_*rtz 3 html angular2-forms angular2-directives angular2-template angular
我创建一个自定义指令并将选择器值设置为" [unless-directive] ".
该指令获取一个布尔值并使用它来更改视图,如下所示:
import {Directive, TemplateRef, ViewContainerRef} from 'angular2/core';
@Directive({
selector: '[unless-directive]',
inputs: ['givenBoolean : myDirectiveFunction']
})
export class UnlessDirective {
private _templateRef: TemplateRef;
private _viewContainerRef: ViewContainerRef;
constructor(_templateRef: TemplateRef, _viewContainerRef: ViewContainerRef) {
this._templateRef = _templateRef;
this._viewContainerRef = _viewContainerRef;
}
set myDirectiveFunction(condition: boolean) {
!condition ? this._viewContainerRef.createEmbeddedView(this._templateRef)
: this._viewContainerRef.clear();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的模板中,我试图传递这样的条件:
<div name="customDirective">
<h2>Custom Directive</h2>
<div>
Enter true or false:
<br/>
<input type="text" #condition (keyup)="0"/>
<div *unless-directive [givenBoolean]="condition.value != 'false'">
Only shown if 'false' wad enterded!
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我收到此错误:
EXCEPTION:模板解析错误:无法绑定到'givenBoolean',因为它不是已知的本机属性("......仅在'false'输入时才显示!"):StructualDirectivesComponent @ 47:39
我想我的语法错了,但我找不到哪里或为什么?
我在Angular2 Docs上查了一下,但是这个例子对输入和选择器使用相同的名称,这是我试图避免的.
任何人都可以知道更好的方法或可以找到我的语法问题?
谢谢.
该*前缀语法只是一个语法糖.它扩展了指令声明.
该
*前缀语法跳过一个便捷的方式<template>包装标签和直接关注的HTML元素重复或包括.Angular看到*并将HTML扩展<template>为我们的标签.
这是在记录* and <template>和指令装饰/生命周期挂钩.
因此,在您的情况下,[givenBoolean]预计该属性不在指令中.换句话说,这个:
<div *unless-directive [givenBoolean]="condition.value != 'false'">
Only shown if 'false' wad enterded!
</div>
Run Code Online (Sandbox Code Playgroud)
变成了,实际上:
<template [unless-directive]="">
<div [givenBoolean]="condition.value != 'false'">
Only shown if 'false' wad enterded!
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
由于givenBoolean不是组件中的属性(不是指令),因此会出现错误.
因此,如果您想要自定义行为,我建议您使用扩展版本进行实验,并且只有在它工作之后才转到*语法,它将更容易推理.
| 归档时间: |
|
| 查看次数: |
2012 次 |
| 最近记录: |