Angular Ivy 在手动变更检测方面具体允许我们做什么?

2024-03-31

本文 https://blog.ninja-squad.com/2019/05/07/what-is-angular-ivy/提到

不过,常春藤为未来开启了一些可能性。现在应该可以在没有 zone.js 的情况下运行应用程序,并半手动处理更改检测(有点像使用 React)。这些 API 已经存在,但处于实验阶段,没有记录,并且可能在不久的将来发生变化。

我认为在 Ivy 之前就已经可以运行没有 zone.js 的应用程序了。 Ivy 是否允许半手动处理变更检测?那些实验性 API 在哪里?有医生吗? Ivy 还在使用 zone.js 吗?

我的目标是通过手动触发更改检测将其限制在最低限度。做到这一点的最佳选择是什么。具体来说,使用 Ivy 时最好的选择是什么。


这是一个很大的话题,但我会尽力回答。

这个想法实际上是渲染组件而不在任何模块内声明它们。

我们为什么要做这样的事情?很简单 - 模块不仅仅是组件。模块有区域、提供者、注入器、DI 等等。对于我们很多人来说,模块代表着应用程序。有时我们只想创建一个简单的组件并在另一个组件中渲染它。

它会带来什么问题呢?模块是为我们设置区域的模块。区域是自动触发变化检测的区域。如果我们在模块外部渲染组件,我们将无法进行自动更改检测。

因此,通过 Ivy,我们有一些新的 API 可以帮助我们:

ɵrenderComponent()- 可以渲染组件而无需在模块中声明它。

ɵdetectChanges();- 手动触发更改检测,但是,这只是一个函数@angular/core并且您不再需要 DI 来注入ChangeDetectorRef

ɵmarkDirty()- 标记要在下一个更改检测周期中检查的组件。

ɵɵdirectiveInject()- 在函数中注入 InjectionToken,而不使用构造函数。

如果你问这是什么ɵ为所有这些新 API 加上前缀,这意味着这些函数仍处于实验阶段,您不应该将它们用于生产。这也是为什么它们没有记录在案的原因。

对于你的问题 - 如果你想最大限度地减少组件中 CD 的使用,只需使用renderComponent功能,并自行处理CD。

如果您想了解更多信息,我写了一篇关于该主题的完整博客文章,其中包括大量代码示例。你可以在这里找到它 - ”Ivy 发布后独立组件的未来 https://blog.angularindepth.com/the-future-of-standalone-components-in-the-post-ivy-release-days-e7ed9b9b4dcd"

我也在 NG-DE 2019 上做了一个演讲——”再见 NgModule https://www.youtube.com/watch?v=MwFl2Rd_RJ0"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular Ivy 在手动变更检测方面具体允许我们做什么? 的相关文章

  • Angular 9:上传图像时如何将 HEIF 文件格式转换为已知的 Web 格式

    我正在维护一个用 Angular 9 编写的 Web 应用程序 PWA 用户可以在 Cropperjs 中上传图像并裁剪 旋转等 在 iOS 上 新的图像格式 HEIF 正在成为标准 这些用 户抱怨他们无法上传照片 似乎iOS有时会自动转换
  • Angular2:鼠标事件处理(相对于当前位置的移动)

    我的用户应该能够通过鼠标在画布中移动 或旋转 对象 当鼠标事件发生时 屏幕坐标用于计算与最后一个事件的增量 方向和长度 没什么特别的 mousedown 获取第一个坐标 mousemove 获取第n个坐标 计算deltaXY 按deltaX
  • 在 Angular 中深度复制对象

    AngularJS 有angular copy 深度复制对象和数组 Angular 也有类似的东西吗 您还可以使用 JSON parse JSON stringify Object 如果它在你的范围内 那么它就存在于每个 Angular 组
  • Angular - 为每个请求设置标头

    我需要在用户登录后为每个后续请求设置一些授权标头 要为特定请求设置标头 import Headers from angular2 http var headers new Headers headers append headerName
  • 如何显示 GroupList 的 FormArray?

    我正在尝试制作一个交互式表单 在每一行上列出一个项目以及一个删除按钮 在我的示例中称为 verwijderen 这些项目是从数据库中检索的 并且每个项目都实例化为名为的自定义对象LaborPeriod 然后这些对象被转化为FormGroup
  • Angular2 Router:将主题标签添加到 url

    我正在使用 Angular2 Seed 应用程序 您可以在官方仓库 https github com mgechev angular2 seed 正如您所看到的 这里我们导入了 angular2 router 并且我们使用它来创建应用程序的
  • 在 Angular 中获取当前路由路径名称的最简单方法是什么?

    我正在寻找一种获取当前路线的路径名称的好方法 这是我能找到的最简单的 this route snapshot firstChild url 0 path 有没有更好的办法 谢谢 谢谢大家的回答 这是我发现我必须做的 router event
  • 角度代理配置不起作用

    我不明白我错在哪里 附 已经尝试通过这个答案修复但仍然不起作用 Angular CLI 代理到后端不起作用 https stackoverflow com questions 39809008 angular cli proxy to ba
  • Angular 2 ngModel 不工作(仅限 javascript)

    所以我是 Angular2 javascript 的新手 我能够通过 5 分钟的 Angular 教程制作一个简单的 Hello world 我对 Angular2 的新变化很好奇 我开始阅读 Angular2 Js 文档 但我发现它不完整
  • 资产未考虑基本 href url - 未找到错误

    我刚刚在 Webform 项目中复制了 Angular 构建脚本 并将该项目部署到 IIS 中 注意 我只复制了脚本文件 没有单独部署在 IIS 中 我已将 Angular dist 文件夹复制到 Webform 项目的 Scripts 文
  • 如何转义角度 HttpParams?

    在 Angular 服务中 我使用 HttpParams 将字符串发送到服务 get phone string Observable
  • 创建 AoT 兼容的服务工厂

    我正在尝试为缓存服务创建一个服务工厂 主要要求是每次可以使用不同的字符串实例化单个服务 最终的结果会有多个cache每个服务都由唯一定义databaseName 每个缓存可以有一个或多个stores也由唯一定义storeName 其他服务将
  • 观众:覆盖单个测试的提供者(角度通用)

    我构建了一个小型角度应用程序 现在正在编写单元测试 到目前为止一切顺利 但是当我尝试测试我的 authGuard 时 我遇到了一些问题 我在用观众 https github com ngneat spectator 我在规范的提供者部分中提
  • 如何在ionic 2中创建覆盖页面?

    当我进入新页面时如何创建透明的引导覆盖页面 我如何在 ionic 2 中实现 您可以在外部创建 div
  • 如何更改 Angular Material 选择中的滚动条样式?

    我们需要帮助来更改 Angular Material 的 Select 组件中的滚动条 实现了以下演示 https stackblitz com angular bxbvndrpogl file app 2Fselect reset exa
  • Docker 绑定安装卷不会传播由角度“ngserve”执行监视的更改事件

    请按照下列步骤操作 定义 Dockerfile FROM node alpine RUN yarn global add angular cli RUN yarn global add node sass RUN mkdir volumes
  • Angular2 - 在反应表单上设置日期字段

    我有一个使用两个日期字段的组件 开始日期和结束日期 默认情况下 我禁用了结束日期字段 当他们选择开始日期时我会切换它 this transitionForm this fb group effectiveEndDate value disa
  • 可从 Angular2 中的

    使用 Angular 2 从按钮的 onclick 事件创建可观察对象的首选方法是什么 我不确定从组件代码中的 DOM 获取本机元素是否被认为是最佳实践 我该怎么做 或者是否还有其他我不知道的快捷方式 别想太多 ViewChild butt
  • Ionic 2 http.get() 问题

    我试着做一个http get 用这两个方法调用 First getResults return this http get http localhost api php toPromise then data gt data json 显示
  • angularfire 2:错误“未处理的承诺拒绝:TypeError:无法读取属性”

    我尝试了一个示例应用程序来连接到 Firebase 在我的 Main ts 中我这样写 import bootstrap from angular platform browser dynamic import enableProdMode

随机推荐

  • Java - 使用分隔符分隔不同参数来解析文本

    如何使用多个分隔符或单个分隔符来检测和分隔不同的字符串匹配项 例如 我使用Scanner解析以下字符串 MrsMarple new Person MrsMarple age 30 我想分离出这个字符串来按顺序确定何时创建新人以及何时设置他们
  • jQuery(document).width() 不包括可视区域之外的宽度

    jQuery document width 不包括总宽度 可见宽度 当有水平条时可见宽度之外 它等于jQuery window width 我想jQuery window width 是可视区域宽度 jQuery document widt
  • ASP.NET Core 2.1 MVC 使用 XMLHttpRequest 将数据从 JavaScript 发送到 Action 方法

    这与下面类似 但没有 Ajax 我正在使用 JavaScript 和 XMLHttpRequest AJAX post数据到达ASP NET Core 2 1控制器时为空 https stackoverflow com questions
  • 何时使用单元测试? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 旋转呈现视图并锁定呈现视图控制器的方向

    我正在开发仅支持横向方向的iPad应用程序 我希望允许一些呈现的视图控制器支持所有方向 而不改变呈现视图控制器的方向 支持 Xcode 设置中除倒置之外的所有方向 我用来呈现视图控制器的代码 ViewController vc self s
  • 需要在 Mac 上安装 Ruby 2.7.2 的帮助

    我正在尝试在我的 Mac 具有所有更新的最新操作系统 上安装 Ruby 版本 2 7 2 并执行以下操作 brew update brew upgrade rbenv ruby build and then rbenv install 2
  • C++11 虚拟析构函数和移动特殊函数的自动生成

    C 11 中自动生成特殊移动函数 构造函数和赋值运算符 的规则指定不能声明析构函数 逻辑大概是 如果你需要在破坏方面做一些特殊的事情 那么这一举动可能不安全 然而 为了在多态性中正确调用析构函数 有必要将基类的析构函数声明为虚拟 否则通过基
  • AngularJS 的配置阶段

    引导 Angular 应用程序的配置阶段发生了什么 无法想象 现在我对提供商感到困惑 SO 可能是配置阶段的洞察力帮助我理解整个过程 因为提供程序可以在配置阶段注入 Thanks 角度应用程序使用服务 http location ETC 有
  • 申请账户信息不正确

    验证应用程序时出现此错误 重新启动 Xcode 和 Mac 机器后 苹果修复了导致问题的任何原因 问题似乎已经解决 在 OS 10 9 5 上通过 iTunes Producer 3 1 成功交付包
  • hql 中分区的 row_number()

    hql 中分区上的 row number 相当于什么 我在 hql 中有以下查询 select s Companyname p Productname sum od Unitprice od Quantity od Discount as
  • 恢复到 nvm 默认版本

    每当我使用 cd 时 我总是得到 Reverting to nvm default version N A version default gt N A is not yet installed You need to run nvm in
  • 使用 Bash 脚本进行日志轮换

    我有以下问题 我有一个应用程序 它不断地向 stderr 和 stdout 生成输出 该应用程序的输出被捕获在日志文件中 该应用程序被重定向为 gt log txt 我没有任何选项来为此生成适当的日志记录 现在 我有一个 cron 作业 它
  • 音频处理和删除音频的某些部分

    我是语音编码新手 现在我成功地在文件中录制麦克风 并将每 10 秒保存在一个文件中SaveRecordtoFile功能 这样做没有问题 现在我想从记录的数据中删除例如 2 秒 这样我的输出将是 8 秒而不是 10 秒 在randomTime
  • 如何获取当前运行的hadoop作业的名称?

    我需要获取当前正在运行的作业名称列表 但是hadoop job list给我一份 jobID 列表 有没有办法获取正在运行的作业的名称 有没有办法从 jobID 中获取作业名称 我不得不多次执行此操作 因此我想出了以下命令行 您可以将其放入
  • 如何从 Entity Framework 4.3 代码优先模型生成 DDL 脚本?

    我有一个正在尝试部署的项目 并且我正在使用廉价的主机来开始 作为托管包的一部分 我有一个 SQL Server 数据库 但我没有删除或创建权限 我只能使用他们为我创建的数据库 既然如此 我想获取 DDL 以便我可以手动运行它 我知道我可以从
  • 如何使用 JavaScript 函数式编程从对象列表中找到具有最低属性的对象?

    老方法 let min Number MAX VALUE for let item of food let current Problem manhattan distance player item if current gt min m
  • Webpacker/Typescript 无法解析 Rails 资产管道文件

    我正在尝试导入 Rails 资产管道中的文件 但由于某种原因 webpack 找不到它 这是我的 tsconfig json compilerOptions declaration false emitDecoratorMetadata t
  • 使用Spring Data JPA调用存储过程时如何传入数组

    我正在关注这个example https dzone com articles calling stored procedures from spring data jpa使用 Spring Data JPA 调用存储过程 这个想法是创建一
  • setNavigationItemSelectedListener 不工作

    My NavigationView onClick活动不起作用 以下是我一一尝试过的代码片段 但没有任何效果 实施NavigationView OnNavigationItemSelectedListener using OnClick M
  • Angular Ivy 在手动变更检测方面具体允许我们做什么?

    本文 https blog ninja squad com 2019 05 07 what is angular ivy 提到 不过 常春藤为未来开启了一些可能性 现在应该可以在没有 zone js 的情况下运行应用程序 并半手动处理更改检