问题 Angular 1.5+组件可选单向绑定


取自AngularJS 1 文件

您还可以通过添加使绑定可选 ? : <? 要么 <?attr

对于单向绑定,可选项与非可选项有何不同?

我似乎可以找出双向可选版本的差异(=)和代表(&)在我的小提琴上绑定: https://jsfiddle.net/glenn/ze2wo0s1/,但不是单向的。

顺便说一下,圣诞快乐!


2837
2017-12-24 23:05


起源



答案:


您可以在源代码中看到它的处理方式: https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L3523

对我来说,看起来如果你使用 <? 并使绑定可选,它提前打破而不设置手表。如果使用 < 并使其成为必需,它设置绑定 undefined 并设置一块手表。然而,它似乎只是在观看 undefined,所以在实践中,除了一次打电话之外没有任何区别 recordChanges。在省略所需绑定的情况下,所需的绑定将成为关键字 changes 传递给的对象 $onChanges 挂上第一个电话。但是,当您省略可选绑定时,它将不是一个键 changes 目的。

举个例子,看看这个 的jsfiddlerequiredBinding 和 optionalBinding 都被省略,因此,初始化为 undefined但是 requiredBinding 是关键 change 对象,而 optionalBinding 不是。


12
2017-12-25 05:26



哇,这么小的细节。谢谢你! :) - Glenn Mohammad


答案:


您可以在源代码中看到它的处理方式: https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L3523

对我来说,看起来如果你使用 <? 并使绑定可选,它提前打破而不设置手表。如果使用 < 并使其成为必需,它设置绑定 undefined 并设置一块手表。然而,它似乎只是在观看 undefined,所以在实践中,除了一次打电话之外没有任何区别 recordChanges。在省略所需绑定的情况下,所需的绑定将成为关键字 changes 传递给的对象 $onChanges 挂上第一个电话。但是,当您省略可选绑定时,它将不是一个键 changes 目的。

举个例子,看看这个 的jsfiddlerequiredBinding 和 optionalBinding 都被省略,因此,初始化为 undefined但是 requiredBinding 是关键 change 对象,而 optionalBinding 不是。


12
2017-12-25 05:26



哇,这么小的细节。谢谢你! :) - Glenn Mohammad


运用 <? 只有当该变量不存在时,控制器才能更改应该绑定的变量的值。

可选的绑定可以在控制器不存在时进行修改。如果将值传递给组件,则无法更改它。

无法修改非可选绑定。如果他们不在场,他们就是 undefined 它们根本无法修改。

例如,假设你有这个:

bindings: {
  nameOptional: '<?',
  nameRequired: '<'
}

在控制器中,你 不能 干脆做 $ctrl.nameRequired = 'something else' 并期望视图得到更新。但是,你 能够 做同样的事 nameOptional 有一个条件:只有 name-optional 未传递给组件。只有这时变量才是要改变的控制器。

为了更好地理解,您可以参考 这个小提琴

请注意,为简化事物,我们使用的是一个按值传递的字符串。如果要传递对象,则可以始终在正常条件下修改对象的属性。


1
2017-09-12 06:40