angular - 如何在自定义元素上实现 ngModel?

标签 angular angular2-template angular2-directives

给定一个简单的 input 元素,我可以这样做:

<input [(ngModel)]="name" /> {{ name }}

这不适用于我的自定义元素:

<my-selfmade-combobox [(ngModel)]="name" values="getValues()" required></my-selfmade-combobox>

我该如何实现?

最佳答案

[(ngModel)]="item"[ngModel]="item"(ngModelChange)="item = $event"

这意味着如果你想给你的组件添加一个双向绑定(bind)属性,例如

<app-my-control [(myProp)]="value"></app-my-control>

您需要在组件中做的就是添加

@Input()
myProp: string;

// Output prop name must be Input prop name + 'Change'
// Use in your component to write an updated value back out to the parent
@Output()
myPropChange = new EventEmitter<string>();

@Input 将处理写入并将新值写回父级,只需调用 this.myPropChange.emit("Awesome") (如果您只是想确保每次值更改时更新它,您可以将发射器放入属性的 setter 中。)

您可以阅读有关其工作原理/原因的更详细解释 here .


如果你想使用名称 ngModel(因为有额外的指令绑定(bind)到带有 ngModel 的元素),或者这是一个 FormControl 元素而不是组件(又名,用于 ngForm),那么您将需要使用 ControlValueAccessor。有关制作您自己的 FormControl 及其工作原理的详细说明,请阅读 here .

关于angular - 如何在自定义元素上实现 ngModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35149535/

相关文章:

angular - 来自 ngFor 项目的动态 routerLink 值给出错误 "Got interpolation ({{}}) where expression was expected"

Angular 通用 : How to create an app shell and only pre-render the shell?

css - PrimeNG 样式/主题

angular - Angular 2 可以通过路由器传递复杂的对象吗?

css - Angular2 最终版本不再支持 :host::shadow

Angular 2 ngFor 在访问属性时未定义

angular - 使用带有angular2的异步管道不起作用

angular - 如何以编程方式在Ionic的variables.scss中设置变量?

angular - 实现自动完成

angular - 如何动态添加指令?