gpt4 book ai didi

angular - Angular 中没有一次性绑定(bind)的原因是什么

转载 作者:行者123 更新时间:2023-12-04 17:49:35 28 4
gpt4 key购买 nike

我已经尝试谷歌搜索了这么长时间,但找不到有效的答案。为什么在 Angular 2 中没有一次性绑定(bind)。我不认为 ChangeDetectionStrategy 是一次性绑定(bind)解决方案。为什么 Angular 团队没有考虑包含这个功能?他们是否看到实现此功能没有性能优势。如果我们只绑定(bind)一次数据,比如标题和标题等,那么一种绑定(bind)方式很好,对吧?由于我们一次性绑定(bind)的观察者较少,他们是否忽略了它?请告诉我。

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

最佳答案

我认为这是因为变更检测机制的实现方式不同。

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

{{name}}

你可以添加观察者:

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

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

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

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

{{name}}

生成的函数将具有以下主体:

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

并且一旦生成,函数体就无法更改。

关于angular - Angular 中没有一次性绑定(bind)的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46206027/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com