Rhu*_*esh 85 development-environment production-environment angular
出于某种原因,我必须在生产模式下运行我的应用程序.这些模式有什么区别?
Gün*_*uer 74
在开发模式下,更改检测会在第一次运行后立即执行第二次运行,并在第一次和第二次运行之间更改任何绑定值时生成错误.这有助于找到检查值具有副作用的错误,或者字段或函数在后续调用中不会返回相同的值,这会破坏Angular的更改检测.
在开发模式中,在第二次更改检测运行期间,Angular还会进行一些深层对象比较,以便在生产中不会检测到不允许的模型更改.
更新:
在开发模式下,当HTML清理程序服务从绑定[innerHTML]="..."或中删除值时,也会向控制台打印提示[ngStyle]="...".另请参阅:在RC.1中,无法使用绑定语法添加某些样式
Mar*_*cok 35
ApplicationRef.tick()的文档状态:
在开发模式中,
tick()还执行第二个更改检测周期(TTL = 2)以确保不会检测到进一步的更改.如果在第二个周期中拾取了其他更改,则应用中的绑定会产生无法在单个更改检测过程中解决的副作用.在这种情况下,Angular会抛出一个错误,因为Angular应用程序只能有一个更改检测通道,在此期间必须完成所有更改检测.
我们无法进行其他更改的原因是因为在生产模式下,更改检测仅运行一次,这意味着组件树中的每个组件都会检查一次(TTL = 1)...从顶部开始,深度优先订购.因此,例如,如果对子组件的输入属性的更改导致更改父组件在视图/模板中绑定的某些其他属性,则不会更新父组件的视图(因为更改检测不会重新访问生产模式中的父组件...因为"一遍"树遍历).它只会在下次发生某些事件时更新并且更改检测再次运行 - 但为时已晚!
这是违反规则的Plunker - 子组件set在输入属性上有一个方法,用于修改另一个输入属性.是的,这是一个人为的例子,但它比下一个更容易理解:
您可能遇到此问题的另一种情况是使用有状态管道.如果这是您的问题,请查看此答案.
你应该描述你的问题(在另一个SO问题中).应该有办法解决它.
| 归档时间: |
|
| 查看次数: |
39045 次 |
| 最近记录: |