最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

如何使用Angular单向数据流

来源:动视网 责编:小OO 时间:2020-11-27 19:50:50
文档

如何使用Angular单向数据流

变更检测;Angular 中,数据是由顶部根节点流向最后的叶子节点,整个数据流是单向,构成一颗单向树。Angular 认为所有的异步操作都有可能会引起模型的变化,引起数据模型发生变化的事件源有。Events:click.mouseover.keyup ..。Timers:setInterval、setTimeout。XHRs:Ajax(GET、POST ...)。Angular 封装 Zone来拦截跟踪异步,一旦发现异步行为,Angular 就会进行变更检测。
推荐度:
导读变更检测;Angular 中,数据是由顶部根节点流向最后的叶子节点,整个数据流是单向,构成一颗单向树。Angular 认为所有的异步操作都有可能会引起模型的变化,引起数据模型发生变化的事件源有。Events:click.mouseover.keyup ..。Timers:setInterval、setTimeout。XHRs:Ajax(GET、POST ...)。Angular 封装 Zone来拦截跟踪异步,一旦发现异步行为,Angular 就会进行变更检测。
 这篇文章主要给大家介绍了关于对Angular中单向数据流的深入理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

变更检测

Angular 中,数据是由顶部根节点流向最后的叶子节点,整个数据流是单向,构成一颗单向树。

Angular 认为所有的异步操作都有可能会引起模型的变化,引起数据模型发生变化的事件源有:

  • Events:click, mouseover, keyup ...

  • Timers:setInterval、setTimeout

  • XHRs:Ajax(GET、POST ...)

  • Angular 封装 Zone来拦截跟踪异步,一旦发现异步行为,Angular 就会进行变更检测。

    因为数据流是单向的,组件的数据来源只能由父组件进行传入,所以 Angular 会从上到下,广度遍历检测组件,只要父组件检测完毕就能继续检测子组件。而相比 angularjs,双向、混乱的数据流方向,会导致重复变更检测重复多次,直到数据稳定,可能会导致性能问题,或者出现数据和视图处于不一致的状态,即渲染过程完成后的视图不能反映数据的实际状态。

    渲染输出

    当检测到数据模型变化时,组件需要重新渲染,Angular将运行它的 DOM 生成函数,该函数会生成一个新的 DOM数据结构,该结构对应于组件 View 的新版本。

    Angular 在渲染过程中,评估模板表达式并在整个组件树中调用生命周期钩子。

    注意:绿色标志会多次调用

    从生命调用周期来看(绿色有向线),ngAfterViewChecked 标示该组件及子组件视图输出完成。看以下一例子:

    import {Component, AfterViewChecked} from '@angular/core';
    import {Course} from "./course";
    @Component({
     selector: 'app-root',
     template: `
     <p class="course">
     <span class="description">{{course.description}}</span>
     </p>
    `})
    export class AppComponent implements AfterViewChecked {
     course: Course = {
     id: 1,
     description: "Angular For Beginners"
     };
     ngAfterViewChecked() {
     this.course.description += Math.random();
     }
    }

    上述代码会在Angular变更检测周期发生错误。组件已经完成 DOM 数据结构输出,我们还在该组件 ngAfterViewChecked() 方法中修改了数据状态。这样导致了视图渲染后,数据跟视图状态不一致。

    数据从组件类流向表示它们的DOM数据结构,生成这些DOM数据结构的行为本身就不会导致数据的进一步修改。但我们在 ngAfterView 生命周期发生修改数据行为,Angular 的“单向数据流”规则禁止在一个视图已经被组合好之后再更新视图。
    这意味着数据模型到视图过程是单向,不可在视图后发生数据流发生改变。

    总结

    从变更检测过程以及渲染输出过程中,可以总结出:

    单向数据流指的是从组件树的顶部到底部渲染扫描过程中应用程序数据流转到由渲染过程生成的输出DOM数据结构的流程。

    相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

    推荐阅读:

    vue-cli有哪些方式缩短首屏加载时间

    vue减少对服务器请求次数

    Vue.js开发常用知识点总结

    文档

    如何使用Angular单向数据流

    变更检测;Angular 中,数据是由顶部根节点流向最后的叶子节点,整个数据流是单向,构成一颗单向树。Angular 认为所有的异步操作都有可能会引起模型的变化,引起数据模型发生变化的事件源有。Events:click.mouseover.keyup ..。Timers:setInterval、setTimeout。XHRs:Ajax(GET、POST ...)。Angular 封装 Zone来拦截跟踪异步,一旦发现异步行为,Angular 就会进行变更检测。
    推荐度:
    标签: 使用 如何 angular
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top