Angular2双向数据绑定问题
我正在尝试以双向数据绑定方式将Angular2双向数据绑定问题,angular,Angular,我正在尝试以双向数据绑定方式将输入控件绑定到第三方控件映射的缩放属性(输入应始终显示当前缩放级别,如果用户更改,映射应缩放到此级别) 目前,它只在一个方向上起作用:对输入框的更改不会应用于地图视图 @Component({ selector: 'map-view', template: '<div id="mapView"></div><input [(value)]=zoom />' }) export class MapViewCompon
输入
控件绑定到第三方控件映射的缩放属性(输入应始终显示当前缩放级别,如果用户更改,映射应缩放到此级别)
目前,它只在一个方向上起作用:对输入框的更改不会应用于地图视图
@Component({
selector: 'map-view',
template: '<div id="mapView"></div><input [(value)]=zoom />'
})
export class MapViewComponent {
view: any = null;
public zoom: number = 10;
constructor(private _mapService: SimpleMapService, private elRef: ElementRef) {
}
ngOnInit() {
this.view = new MapView({
container: this.elRef.nativeElement.firstChild,
map: this._mapService.map,
zoom: this.zoom,
center: [10.44, 42.947974]
})
this.view.watch('zoom', function(newVal, oldVal, propertyName) {
this.zoom = newVal;
}.bind(this));
}
}
到组件
而且它似乎在起作用。但这真的是应该做的吗?在Angular1中,它确实可以在没有任何事件的情况下使用
$scope.$apply
。尝试此您还可以使用箭头函数保留此此.view.watch的范围('zoom',(newVal,oldVal,propertyName)=>{this.zoom=newVal;}
我认为这使代码更短,更容易阅读。出于性能原因,Angular2不使用双向绑定。另请参见我对“啊,我明白了!”的回答。谢谢。我怎么会错过这一点。是的,这是Angular2的一个重要部分。如果表达式不包含空格或特殊字符,则不需要引号。问题不在于没有valueChange
事件。这就是为什么[(value)]=…
不起作用的原因。因此,您的第二个建议是直截了当的。谢谢各位。我更新了我的帖子,以回应您的建议,加入了值更改事件。
updateZoom(newValue) {
this.view.zoom = newValue;
}