在Angular中没有一次性绑定的原因是什么

时间:2017-09-13 20:08:11

标签: angular

我试过谷歌搜索这段很长时间但找不到有效的答案。为什么在角度2中没有一次时间绑定。我不认为ChangeDetectionStrategy是一个时间绑定解决方案。为什么有角度的团队不考虑包含此功能?他们没有看到实现这一点的性能优势。如果我们只像标题和标题等那样绑定数据一次,那么单向绑定很好吗?既然我们对一次性绑定的观察者较少,他们会忽略它吗?请告诉我。

编辑使用{{:: name}}在角度1中可以在属性级别进行一次绑定,但这不包括在角度2中。为什么删除了语法。非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

我相信它是因为改变检测机制的实施不同。

在AngularJS中,您可以动态添加或删除更新DOM的观察者。例如,如果您有以下模板:

{{name}}

你可以添加观察者:

const unwatch = $scope.$watch('name', () => { updateDOM() });

有趣的是,AngularJS会返回对您可以调用以动态删除观察程序的函数的引用。 Angular本身使用这种可能性在第一次调用一次绑定后删除了观察者:

const unwatch = $scope.$watch('name', () => { if (!initial) unwatch(); updateDOM() });

然而,在Angular中,机制是不同的。检查绑定的代码由编译器静态生成,因为"观察者" 动态添加,无法动态删除。执行DOM检查的生成函数称为updateRenderer,您可以在文章The mechanics of DOM updates in Angular中阅读更多相关信息。所以对于绑定:

{{name}}

生成的函数将具有以下正文:

var _co = _v.component;
var currVal_0 = _co.name; // read value
_ck(_v,1,0,currVal_0);    // update DOM

一旦生成,功能体就无法改变。