用于双向属性绑定的Angular2修饰符

用于双向属性绑定的Angular2修饰符,angular,angular2-directives,angularjs-bindings,Angular,Angular2 Directives,Angularjs Bindings,在Victor Savkin的文章中,演示了如何使用输入和输出属性绑定- <todo-cmp [model]="todo" (complete)="onCompletingTodo(todo)"></todo-cmp> @Component({selector: 'todo-cmp'}) class TodoCmp { @Input() model; @Output() complete = new EventEmitter(); // TypeScript s

在Victor Savkin的文章中,演示了如何使用输入和输出属性绑定-

<todo-cmp [model]="todo" (complete)="onCompletingTodo(todo)"></todo-cmp>

@Component({selector: 'todo-cmp'})
class TodoCmp {
  @Input() model;
  @Output() complete = new EventEmitter(); // TypeScript supports initializing fields
}

@组件({选择器:'todo cmp'})
类TodoCmp{
@输入()模型;
@Output()complete=neweventemitter();//类型脚本支持初始化字段
}
输入属性用@input()修饰,而输出属性用@output()修饰。 如何声明将具有双向属性绑定的属性? 示例:假设根面板组件具有“建议”属性(类型为string),而searchPanel具有“getSuggestions”属性。现在我希望这两个属性以两种方式相互绑定。 我试过-

rootpanel.html:

<search-panel [(getSuggestions)]="suggestions"> </search-panel>

但是我在searchPanel组件中声明getSuggestions属性时遇到了问题。 getSuggestions属性--
字符串或EventEmitter的类型应该是什么


请建议。

如果您希望从父组件进行双向模型绑定:

[(model)]
您的子组件中需要以下内容:

@Input() model: string;
@Output() modelChange:EventEmitter<string>;
从父组件的角度来看,
[(model)]
相当于:

[model]="model"  (modelChange)="model=$event"
这样,当子组件内的模型属性发生更改时,模型中的更改会通过双向绑定向上传播,同步所有绑定的模型。

如果要使用
[(getSuggestions)]
-style进行双向绑定,请声明如下字段

类TodoCmp{
@输入建议;
@Output()getSuggestionChange=neweventEmitter();
onClick(){
getSuggestions='someValue';
getSuggestionChange.emit(getSuggestions);
}
}
getSuggestions
对于这样的输入/输出组合可能不是一个好的选择,但它应该演示它们是如何连接的。输出需要与输入具有相同的名称,并进行额外的
更改
。 如果此命名方案不适合,请使用您的组件,如


建议的方法pixelbits正是您应该如何做到这一点,但是如果您在一个组件上有多个双向数据绑定属性,或者甚至在代码库中有一个频繁更改的属性,我为其创建了一个装饰器。 如果您使用的是npm,则是。 如果需要代码,只需转到gihub页面

有了此功能,您可以直接使用:

从'@angular/core'导入{Component};
从“双向装饰器”导入{TwoWay};
@组成部分({
选择器:“应用程序示例”,
templateUrl:'./example.component.html',
样式URL:['./example.component.scss']
})
导出类ExampleComponent{
@双向
公共文本:字符串;
@双向
公众计数:数字;

}
谢谢,这很有帮助。谢谢你的解释。
[model]="model"  (modelChange)="model=$event"