为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
Why does Angular 1.5 two way binding fail when passing a scope variable to component binding?
因此,我们正在将Angular 1.3范围汤应用程序提高到1.5标准。但我们注意到了一些奇怪的行为。当我们将$scope变量传递到组件绑定中时,它似乎无法正确反映组件内对$scope可变项所做的任何更改。
我们基于$scope的控制器:
app.controller('ParentCtrl', function ($scope) {
$scope.dates = [...array of dates...]
$scope.focusDate = new Date()
})
我们的组件标签:
<section-dates dates="dates" focus-date="focusDate"></section-dates>
组件本身:
app.component("sectionDates", {
bindings: {
dates: "=",
focusDate: "="
},
controller: function () {
this.onClickADate = function (date)
{
this.focusDate=date
}
...
}
单击新日期时,focusDate会在组件中发生更改,但不会在父控制器的$scope中发生更改。为什么会这样?
我们正在经历类似的事情。
我们花了一些时间思考的一个重要概念是,所有组件都具有隔离的$scope。因此,从理论上讲,这可以防止您提到的"$scope汤"问题,但在实践中,这导致需要显式地将数据传入和传出组件,这可能需要一些时间来适应
通常,您希望保持数据不可变,也就是说,防止子组件直接更改数据(在某些特定情况下,双向数据绑定可以改进UI)。
这里的想法是使用单向数据绑定将数据传递到组件中,如下所示:
...
bindings: {
oneWayBindingInput: '<'
},
...
然后将事件传回到子组件,然后由父组件处理:
...
bindings: {
oneWayBindingInput: '<'
onEventOutput: '&'
},
...
所以在你的情况下,你可以尝试这样的东西:
组件标签(在父模板中):
<section-dates dates="dates" on-update="handleUpdateEvent($event)"></section-dates>
组件:
app.component("sectionDates", {
bindings: {
dates: "<",
onUpdate: "&"
},
controller: function () {
this.onClickADate = function (date)
{
this.onUpdate({$event: {date: date});
}
...
}
父控制器:
app.controller('ParentCtrl', function ($scope) {
$scope.dates = [...array of dates...];
$scope.handleUpdateEvent = function(event) {
$scope.date = event.date;
};
})
只是一个简短的提示。如果单向数据绑定到组件中的数据是一个对象,那么它的属性仍然是可变的。单向数据绑定在这里不会被破坏,这是典型的javascript行为。Todd Motto讨论了一种通过克隆数据来打破绑定的伟大技术:
$onChanges() = function(changes) {
if(changes.user) {
this.user = angular.copy(this.user);
}
};
有关更多示例,请参阅这些具有有用组件模式的参考:https://toddmotto.com/exploring-the-angular-1-5-component-method/http://dfsq.info/site/read/angular-components-communication
- react组件中的绑定方法
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 将事件绑定到其他UI组件's函数,在Kendo MVVM中
- 如何刷新'选项'ko多选组件中的绑定
- bind():您正在将一个组件方法绑定到该组件.React会自动为您执行此操作
- Ember组件:将attr绑定到每个属性中
- 如何将事件绑定到模式对话框上的组件
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- 如何绑定'这'到react类之外的函数,后者是来自其他组件的回调
- Angular 1.5组件双向绑定不起作用
- AngualrJS:为什么组件范围不绑定
- Angular 1.5 嵌套组件绑定父值
- 通用角度组件 - 可选绑定
- 挖空绑定自定义组件,使其不与中心视图模型冲突
- Angular2 - 组件变量/组件类属性上的双向数据绑定
- 如何在 Angular 1.5 组件中等待绑定(没有 $scope.$watch)
- 反应组件中的绑定函数
- 两个网络组件之间的绑定:谷歌地图+地理定位
- ReactJS以正确的方式绑定组件方法
- 有条件地绑定组件状态