zoukankan      html  css  js  c++  java
  • 4-15 脏值检测(1)



    angular如何得知你组件内部的变化,然后对他的绑定情况去更新视图的呢?


    angular会把绑定的东西生成一个表达式



    组件的生命周期和脏监测的关系。
    增值检测就会去跑这个树,跑这个树的时候会跑两遍。增值检测之后会进行AfterViewChecked和AfterVIewInit。
    更新视图之后的方法是不能改变属性值的,因为它会再引起新的一轮脏值监测,这样就会带来一个无线循环的问题。这边不断的变化,就会不断的监测。


    脏值检测要检查整个的树,树的节点如果过多的话,就会出现性能的问题。那么怎么解决呢?angular提供的方式叫做OnPush
    分为默认策略,就是不管你在任何地方发生的变化,脏值检测都会把整个树跑一边,那么这样就没有遗漏啦。但是这样性能低,
    onPush策略就是,只对组件中有Input注解的属性进行脏值监测,这个注解的属性发生了改变,那么我们就会引发一次脏值监测,如果不改变,就不监测,而且监测的时候只监测有脏值发生的节点和它的子节点,所以他是一个优化型的方案。带来的问题就是有很多东西你可能需要手动操作一下。原来框架帮你自动完成的东西,现在变成了优化策略,因为优化了性能,所以它有很多东西不通知了。有的时候你还是希望他会通知,那么这个时候就需要手动操作。最后我们会在实战中讲。

    这种策略下子组件就变成了一个木偶,它的所有的行为依赖于它自己定义的input。而这个属性谁在用?是他的父组件在用。也就是它的所有行为,是由它的父组件通过设置它的input类型的输入型属性来去控制它。它自己没有自己可以控制的行为,所以它的状态改变都依赖于它的父组件。它就编程了一个单纯的木偶型组件。但是往往是比较笨的组件,通用性更好。html里面的标签都是笨组件div、span。不用关心他的逻辑,你给我设置成什么东西就是什么东西。

    所以OnPush是最佳实现,能用OnPush的尽量用OnPush策略。

     

    结束


     

  • 相关阅读:
    redis+nginx+tomcat故障大全
    Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
    Redis初步认识
    私有IP地址共有三个范围段
    公有云和私有云的区别
    svn安装与其服务器搭建
    datagrid后台分页js
    easyui.dialog.js
    EasyUI 另一种form提交方式
    easyui- grid前台分页
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/13583888.html
Copyright © 2011-2022 走看看