iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Angular中Change Detection的示例分析
  • 134
分享到

Angular中Change Detection的示例分析

2023-06-06 11:06:21 134人浏览 八月长安
摘要

这篇文章主要介绍angular中Change Detection的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ChangeDection检测程序内部状态,然后反映到UI上。引起状态变化,引发检查的驱动源:E

这篇文章主要介绍angular中Change Detection的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

ChangeDection

检测程序内部状态,然后反映到UI上。

引起状态变化,引发检查的驱动源:Events,XHR,Timers

ApplicationRef监听NgZone的onTurnDone,然后执行检测。

Angular中Change Detection的示例分析

OnPush状态完全由外部决定,内部不会去更改状态。

例子:

聪明组件project-list变成OnPush检查策略,

在需要检测时候使用cd.markForCheck).

@Component({  selector: "app-project-list",  templateUrl: "./project-list.component.html",  styleUrls: ["./project-list.component.sCSS"],  animations:[    slideToRight,listAnimation  ],  changeDetection: ChangeDetectionStrategy.OnPush})

手动告诉Angualr你来检查我

在事件发生的时候主动告诉Angular来检查这条路线。

import { Component, OnInit , HostBinding, ChangeDetectionStrategy, ChangeDetectorRef } from "@angular/core";import { MatDialog } from "@angular/material";import { NewProjectComponent } from "../new-project/new-project.component";import { InviteComponent } from '../invite/invite.component';import { ConfirmDialoGComponent } from '../../shared/confirm-dialog/confirm-dialog.component';import {slideToRight} from '../../animate/router.animate'import { listAnimation } from '../../animate/list.animate';import { projection } from '@angular/core/src/render3';@Component({  selector: "app-project-list",  templateUrl: "./project-list.component.html",  styleUrls: ["./project-list.component.scss"],  animations:[    slideToRight,listAnimation  ],  changeDetection: ChangeDetectionStrategy.OnPush})export class ProjectListComponent implements OnInit {  @HostBinding('@routeAnim') state;  projects = [    {      id:1,      name: "企业协作平台",      desc: "这是一个企业内部项目",      coverImg: "assets/images/covers/0.jpg"    },    {      id:2,      name: "自动化测试项目",      desc: "这是一个企业内部项目",      coverImg: "assets/images/covers/2.jpg"    }  ];  constructor(private dialog: MatDialog, private cd:ChangeDetectorRef) { }  nGonInit() { }  openNewProjectDialog() {    // this.dialog.open(NewProjectComponent,{data:'this is a dialog'});    const dialogRef = this.dialog.open(NewProjectComponent, {      data: { title: '新建项目' }    });    dialogRef.afterClosed().subscribe((result) => {      console.log(result);      this.projects = [...this.projects,         {id:3,name:'一个新项目',desc:'这是一个新项目',coverImg:"assets/images/covers/3.jpg"},        {id:4,name:'又一个新项目',desc:'这是又一个新项目',coverImg:"assets/images/covers/4.jpg"}]    });    this.cd.markForCheck();  }  lauchInviteDialog() {    const dialogRef = this.dialog.open(InviteComponent);  }  lauchUpdateDialog() {    const dialogRef = this.dialog.open(NewProjectComponent, {      data: { title: '编辑项目' }    });  }  lauchConfimDialog(project) {    const dialogRef = this.dialog.open(ConfirmDialogComponent, {      data: { title: '删除项目', content: '您确认删除该项目吗?' }    });    dialogRef.afterClosed().subscribe(result=>{      console.log(result);      this.projects=this.projects.filter(p=>p.id!=project.id);      this.cd.markForCheck();    });  }}

把笨组件标识为OnPush

直接加changeDetection:ChangeDetectionStrategy.OnPush

@Component({  selector: 'app-new-project',  templateUrl: './new-project.component.html',  styleUrls: ['./new-project.component.scss'],  changeDetection:ChangeDetectionStrategy.OnPush})

ChangeDetectorRef

export abstract class ChangeDetectorRef {  abstract markForCheck(): void;  abstract detach(): void;  abstract detectChanges(): void;  abstract reattach(): void;}<br>markForCheck() - 当输入已更改或视图中发生了事件时,组件通常会标记为脏的(需要重新渲染)。调用此方法会确保即使那些触发器没有被触发,也仍然检查该组件。<br>在组件的 metadata 中如果设置了 changeDetection: ChangeDetectionStrategy.OnPush 条件,那么变化检测不会再次执行,除非手动调用该方法。detach() - 从变化检测树中分离变化检测器,该组件的变化检测器将不再执行变化检测,除非手动调用 reattach() 方法。reattach() - 重新添加已分离的变化检测器,使得该组件及其子组件都能执行变化检测detectChanges() - 从该组件到各个子组件执行一次变化检测 检查该视图及其子视图。与 <a href="https://angular.cn/api/core/ChangeDetectorRef#detach">detach</a> 结合使用可以实现局部变更检测。

以上是“Angular中Change Detection的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Angular中Change Detection的示例分析

本文链接: https://www.lsjlt.com/news/246845.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Angular中Change Detection的示例分析
    这篇文章主要介绍Angular中Change Detection的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ChangeDection检测程序内部状态,然后反映到UI上。引起状态变化,引发检查的驱动源:E...
    99+
    2023-06-06
  • 浅析Angular中的Change Detection机制
    // Angular 在 v5.0.0-beta.8 起可以通过配置不使用 Zone import { platformBrowser } from '@angular/platform-browser'; p...
    99+
    2023-05-14
    Change Detection 前端 Angular.js
  • Angular中的Change Detection机制怎么实现
    这篇文章主要介绍“Angular中的Change Detection机制怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Angular中的Change Detection机制怎么实现”文章能帮...
    99+
    2023-07-04
  • Angular中PIPE的示例分析
    这篇文章主要为大家展示了“Angular中PIPE的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular中PIPE的示例分析”这篇文章吧。 ...
    99+
    2024-04-02
  • Angular中NgModule的示例分析
    这篇文章主要介绍了Angular中NgModule的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本篇文章带大家详细了解一下Angular中的NgModule(模块)...
    99+
    2023-06-14
  • Angular中DevTools的示例分析
    这篇文章将为大家详细讲解有关Angular中DevTools的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Angular 团队宣布推出 Angular DevT...
    99+
    2024-04-02
  • Angular中HttpClient的示例分析
    小编给大家分享一下Angular中HttpClient的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!现代浏览器支持使用...
    99+
    2024-04-02
  • Angular中Component/Service的示例分析
    小编给大家分享一下Angular中Component/Service的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!关于Angular Componentcss样式的作用域、Shadow DOMShadow DOM...
    99+
    2023-06-15
  • Angular中表单的示例分析
    这篇文章主要介绍Angular中表单的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular 表单什么是模板式表单表单的数据模型是通过组件模板中的相关指令来定义的, 因为使用这种方式定义表单的数据模型时...
    99+
    2023-06-14
  • Angular中路由的示例分析
    这篇文章将为大家详细讲解有关Angular中路由的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 摘要简单来说地址栏中,不同的地址(URL)对应不同的页面,这...
    99+
    2024-04-02
  • angular+webpack2的示例分析
    这篇文章主要介绍了angular+webpack2的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。webpack出了中文版以后,对于...
    99+
    2024-04-02
  • Angular中Route路由的示例分析
    这篇文章主要介绍Angular中Route路由的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular 路由(Route)我们可以将路由器理解成控制整个应用状态的视图对象, 每个应用都有一个路由器; 路...
    99+
    2023-06-14
  • Angular中$injector对象的示例分析
    这篇文章给大家分享的是有关Angular中$injector对象的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。$injector其实是一个IOC容器,包含了很多我们通过.module()和$provid...
    99+
    2023-06-15
  • css中will-change属性的示例分析
    这篇文章主要介绍了css中will-change属性的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。will-changeCSS 属...
    99+
    2024-04-02
  • angular路由之angular-router的示例分析
    这篇文章主要介绍了angular路由之angular-router的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:创建项目...
    99+
    2024-04-02
  • Angular中组件@Component的示例分析
    这篇文章主要介绍Angular中组件@Component的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 概述组件是 Angular 应用的主要构造块。每个组件包括如下部分:一个 HTML 模板,用于声明...
    99+
    2023-06-15
  • Angular开发的示例分析
    这篇文章给大家分享的是有关Angular开发的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是AngularAngularJS是动态Web应用程序的结构框架。 它允许...
    99+
    2024-04-02
  • angular服务的示例分析
    小编给大家分享一下angular服务的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!依赖注入创建服务需要用到Inject...
    99+
    2024-04-02
  • Angular排序的示例分析
    这篇文章主要为大家展示了“Angular排序的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular排序的示例分析”这篇文章吧。angular的排...
    99+
    2024-04-02
  • Angular中变化检测的示例分析
    这篇文章主要为大家展示了“Angular中变化检测的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular中变化检测的示例分析”这篇文章吧。Cha...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作