【发布时间】:2019-07-14 18:23:08
【问题描述】:
我尝试创建看起来像搜索表单的自定义组件。我用选择器my-search 创建了SearchComponent,在其中我放置了带有附加指令InputDirective 和选择器[myInput] 的HTML <input> 元素:
<my-search>
<input myInput>
</my-search>
问题是如何检测来自InputDirective 内部SearchComponent 的变化?例如:当用户在输入中输入一些文本时,我应该启用或禁用按钮:
search.component.html
<ng-content select="[myInput]"></ng-content>
<button type="button" [disabled]="!searchText">Search</button>
我尝试订阅组件内部指令的更改,但它不起作用。
search.component.ts
@Component({
selector: 'my-search',
templateUrl: './search.component.html'
})
export class SearchComponent implements AfterContentInit {
@ContentChild(InputDirective) input: InputDirective;
ngAfterContentInit() {
this.input.changes.subscribe(changes => console.log(changes));
}
}
我还尝试在属性element 中导出本机输入。
input.directive.ts
@Directive({
selector: '[myInput]'
})
export class InputDirective {
element: HTMLInputElement;
constructor(private elementRef: ElementRef) {
this.element = this.elementRef.nativeElement;
}
}
当尝试使用 getter 获取输入值时,它也不起作用。
search.component.ts
@Component({
selector: 'my-search',
templateUrl: './search.component.html'
})
export class SearchComponent implements AfterContentInit {
@ContentChild(InputDirective) input: InputDirective;
get searchText(): string {
return this.input.element.value;
}
}
谁能帮我解决这个问题?这里是link 用于实验。
【问题讨论】:
-
简单的二传手适合你吗?
-
我添加了这个设置器,但它没有任何改变。
set searchText(value: string) { this.input.element.value = value; }
标签: angular angular6 angular2-directives angular2-components