首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

angular 5调用绑定类的函数将导致该函数被无限次调用

Angular 5是一种流行的前端开发框架,它提供了丰富的功能和工具来构建现代化的Web应用程序。在Angular 5中,调用绑定类的函数可能会导致该函数被无限次调用的问题,这是由于Angular的变更检测机制引起的。

在Angular中,当组件的属性发生变化时,Angular会自动检测并更新相关的视图。为了实现这一机制,Angular会在每次变更检测周期中比较组件的属性值,如果发现有变化,则会触发相应的更新操作。

当调用绑定类的函数时,如果该函数内部修改了组件的属性值,那么Angular会认为组件的属性发生了变化,从而触发变更检测。而在变更检测过程中,又会再次调用绑定类的函数,形成了无限循环调用的情况。

为了解决这个问题,可以采取以下几种方法:

  1. 使用Angular的ChangeDetectionStrategy策略:可以通过在组件中设置ChangeDetectionStrategy为OnPush来改变变更检测的策略。这样做会使得变更检测仅在组件的输入属性发生变化时才触发,而不会在调用绑定类的函数时触发。
  2. 使用ngDoCheck生命周期钩子:ngDoCheck是Angular提供的一个生命周期钩子,可以在组件的变更检测周期中执行自定义的逻辑。通过在ngDoCheck中手动检测属性的变化,并避免无限循环调用,可以解决该问题。
  3. 优化函数的逻辑:检查绑定类的函数是否真正需要在每次变更检测时都被调用。如果不需要,可以考虑将函数的逻辑进行优化,避免不必要的调用。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AngularJSdigest循环和$apply

结果查阅资料,终于得知,使用第三方框架(比如jQuery),或者调用setTimeout(),会导致其运行在AngularJS上下文外部,可以使用apply()函数Angular返回apply()函数让...$watch列表 angular跟踪变化,是通过给watch列表添加一个监控函数做到,需要注意是所有绑定给同一watch列表添加一个监控函数做到,需要注意是所有绑定给同一scope对象UI元素...循环之前,会触发值(ng-model)上运行验证和格式化操作; (5)由于在digest循环中值发生了变化,angular需要再次运行这一循环以确定它没有改变作用域对象上其他值。...当手动处理事件,使用第三框架(比如jquery)或者调用setTimeout都可以使用apply()函数值传递到angular应用中。...(1)不建议在控制器中使用$apply(),因为这样会导致难以测试。 (2)jquery和angular同时使用视为一个肮脏行为。

3.2K41

angular面试题及答案_angular面试

首次调用一定发生在ngOnInit前,值得注意方法仅限于对象引用发生变化时才会触发。...ngOninit:初始化指令或组件,在angular第一次显示展示组件绑定属性后调用方法只会调用一次 ngDocheck:检测 ngAfterContentInit:当把内容投影进组件之后调用,...第一次调用ngDocheck()之后调用,只调用一次,只适用于组件 ngAfterContentChecked:每次完成投影组件内容变更检测之后调用,只适用于组件 ngAfterViewInit...module声明了哪些模块可以其他模块使用,依赖注入了哪些,以及启动component,模块来管理组件,使app实现模块化。 21. 怎样在组件中选择一个元素?...当初始化之后,构造函数会被调用 ngOnInit ngOnInit 是angular中OnInit钩子实现,用来初始化组件。

11.1K120
  • 【17】进大厂必须掌握面试题-50个Angular面试

    不仅如此,Angular还具有内置数据流,类型安全性和模块化CLI功能,认为是成熟Web框架。 5.什么是角度表达式?...它是一个具有 get()方法对象,方法调用以创建服务新实例。提供者还可以包含其他方法,并使用 provide来注册新提供者。 中级–面试问题 16. Angular是否支持嵌套控制器?...Angular组件具有离散生命周期,其中包含从出生到死亡过渡不同阶段。为了更好地控制这些阶段,我们可以使用以下方法将其连接: 构造函数: 通过在调用new创建组件或指令时调用它。...在第一个ngOnChanges之后,挂钩在其生命周期中仅调用一次。 ngDoCheck:每当调用给定组件更改检测器时,便会调用它。这使您可以为提供组件实现自己变更检测算法。...在这里,引擎盖下run()调用tick本身,然后参数将在tick之前获取函数并执行它。

    41.4K51

    Angular 从入坑到挖坑 - 组件食用指南

    在组件中,通过使用 @Component 装饰器 1 用来声明为组件,并为这个组件配置一些元数据 2,以决定组件在运行期间如何处理、实例化和使用 装饰器中存在三个基础配置参数,用来完成组件与视图之间关联...,数据源与视图进行绑定,从而实现源数据与用户呈现一致性 从数据源到视图:插值、组件中属性、dom 元素 property 3、css 样式、css 从视图到数据源:事件 视图与数据源之间双向绑定...五、组件生命周期钩子函数angular 在创建、更新、销毁组件时都会触发组件生命周期钩子函数,通过在组件中实现这些生命周期函数,从而介入到这些关键时刻 钩子函数 触发时机 ngOnChanges...被绑定输入属性值发生变化时触发,会调用多次;如果没有使用到父子组件传值,则不会触发 ngOnInit 初始化组件时会调用一次,一般是用来在构造函数之后执行组件复杂初始化逻辑 ngDoCheck 只要数据发生改变就会被调用...---- 装饰器是一种特殊类型声明,它能够附加到声明,方法, 访问符,属性或参数上,就像是 C# 中特性↩ 元数据是用来描述数据数据项,例如这里 selector 是为了描述 Component

    15.8K30

    再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

    两者区别在于页面没有加载完毕 {{val}} 会直接显示到页面,直到 Angular 渲染绑定数据(这种行为有可能将 {{val}} 让用户看到);而 ng-bind 则是在 Angular 渲染完毕后数据显示...通常写代码时我们无需主动调用 $apply 或 $digest 是因为 angular 在外部对我们回调函数做了包装。...angular 会因为这个事件回调函数什么都没做就不进行脏检查吗?不会。 然后:#span1 隐藏掉了,会检查绑定在它上面的表达式吗?尽管用户看不到,但是 $scope....定义为Javascript原型,在html中直接绑定原型属性和方法 优点: 可以使用 Javascript 原型, 我们可以使用更加高级 ES6 或者 TypeScript 来编写 Controller...编译一段HTML字符串或者DOM模板,产生一个scope和模板连接到一起函数

    7.8K40

    AngularDart 4.0 高级-管道 顶

    AsyncPipe也是有状态。 管道保持对输入Stream订阅,并在到达时保持Stream值。 下一个示例使用异步管道消息字符串(message)Stream绑定到视图。...]; } 异步管道样板文件保存在组件代码中。 组件不必订阅异步数据源,提取已解析值并将其公开以进行绑定,并且必须在其销毁时取消订阅(内存泄漏有效来源)。...回过头来,你回顾了FlyingHeroesImpurePipe--一个纯粹功能不纯管道。 总是要实现一个纯函数纯管道。 否则,你会看到很多关于表达式检查后改变控制台错误。...附录:FilterPipe或OrderByPipe Angular不提供过滤或排序列表管道。 熟悉Angular 1开发人员这些知识视为filter和orderBy。...当Angular每秒钟多次调用这些管道方法时,即使是中等大小列表,用户体验也会严重降级。 filter和orderBy经常被滥用在Angular 1应用程序中,导致投诉Angular本身很慢。

    6.4K20

    Angular2 之 单元测试

    组件测试 单独service测试 Angular测试工具 Angular测试工具包含了TestBed和一些辅助函数方法,当时这不是唯一,你可以不依赖Angular DI(依赖注入)系统,...通过测试代码放到特殊异步测试区域来运行,async函数简化了异步测试程序代码。 接受参数函数方法,返回参数函数方法,变成Jasmineit函数参数。...和async一样,它也接受参数函数并返回一个函数,变成Jasmineit 函数参数。 fakeAsync函数通过在特殊fakeAsync测试区域运行测试程序,让测试代码更加简单直观。...tick tick函数Angular测试工具之一,是fakeAsync同伴。 它只能在fakeAsync主体中被调用。...你仍然可以接受 done回调函数传给it。 但是,你必须链接承诺、处理错误,并在适当时候调用done。

    5.5K20

    浅谈Hooks&&生命周期(2019-03-12)

    Vue-lifecycle Angular生命周期: Hook Purpose and Timing ngOnChanges() Angular(重新)设置数据绑定输入属性时响应。...方法接收[SimpleChanges](https://angular.io/api/core/SimpleChanges)当前和先前属性值对象。...ngOnInit()在一个或多个数据绑定输入属性发生更改 之前和之后调用。 ngOnInit() 在Angular首次显示数据绑定属性并设置指令/组件输入属性后初始化指令/组件。...[ngAfterContentInit()] 在Angular外部内容投影到组件视图/指令所在视图后进行响应。在第一次之后 调用一次ngDoCheck()。...渲染时候,这个 useState 调用都会被执行,useState 自己肯定不是一个纯函数,因为它要区分第一次调用(组件 mount 时)和后续调用(重复渲染时),只有第一次才用得上参数初始值,

    3.2K40

    Angular学习笔记(一)

    Angular 模块都是一个带有 @NgModule 装饰器。 NgModule 是一个装饰器函数,它接收一个用来描述模块属性元数据对象。...指令 Angular 模板是动态。当 Angular 渲染它们时,它会根据指令提供操作对 DOM 进行转换。 服务 服务是一个广义范畴,包括:值、函数,或应用所需特性。...Angular 使用依赖注入来提供新组件以及组件所需服务。 2. 模板与数据绑定 绑定类型可以根据数据流方向分成三: 从数据源到视图、从视图到数据源以及双向从视图到数据源再到视图。...生命周期 ngOnChanges() 当 Angular 重新设置数据绑定输入属性时响应。方法接受当前和上一属性值 SimpleChanges 对象。...第一次 ngDoCheck() 之后调用,只调用一次。 只适用于组件。 ngAfterContentChecked() 每次完成投影组件内容变更检测之后调用

    3.3K20

    Angularjs1.X进阶笔记(1)—两种不同双向数据绑定

    解决方案2 如果依然使用javascript原生定时方法,那么则需要在修改完视图数据模型后,手动调用$scope.$apply()方法来数据模型变动同步到html页面中。 二....则会打印出自定义指令中scope.pagination值,并将该值进行自增 接下来测试操作,我们按照如下流程进行: 点击5次+1按钮,再点击5次数字标签 点击show $scope.testInfo...我们看到,第一次点击数字标签时,控制台打出了link函数中scope.pagination值为5,这说明$scope.testInfo.content传递给了自定义指令中scope.pagination...每当WatchCollection中有变量出现变动时,Angular就会遍历WatchCollection来查看是否有其他监控中变量也影响,每当有一个变量影响,Angular都会在遍历后再进行一次遍历...我们可以回顾一下上面在使用双向数据绑定发生异常时场景: 使用了原生定时器(Angular中你应该使用$interval,$timeout服务) 用原生方法(bind)为元素添加事件监听器,并在回调函数中修改了变量

    3.5K20

    Angular constructor vs ngOnInit

    constructor 在 ES6 中就引入了,constructor(构造函数)是特殊方法,主要用来做初始化操作,在进行实例化操作时,会被自动调用。...组件生命周期中一个钩子,Angular所有钩子和调用顺序如下: ngOnChanges —— 当数据绑定输入属性值发生变化时调用 ngOnInit —— 在第一次 ngOnChanges 后调用...用于在 Angular 获取输入属性后初始化组件,钩子方法会在第一次 ngOnChanges 之后调用。...constructor 应用场景 在 Angular 中,构造函数一般用于依赖注入或执行一些简单初始化操作。...,我们可以知道静态属性是属于 AppComponent 构造函数,而成员属性是属于 AppComponent 实例。

    1.4K20

    (转) 别再对 Angular 表单 ControlValueAccessor 感到迷惑

    formControl 指令,都会调用 setUpControl 函数来让表单控件和DefaultValueAccessor 实现交互(译者注:意思就是上面代码中绑定 formControl 指令,在其自身实例化时...,会调用 setUpControl() 函数给同样绑定到 input DefaultValueAccessor 指令做好安装工作,如 L85,这样 formControl 指令就可以借助 DefaultValueAccessor...表单控件是如何数据同步(译者注:作者贴可能是 Angular v4.x 代码,v5 有了点小小变动,但基本相似): export function setUpControl(control: FormControl...由于我们实现是新组件通信方式,所以不需要标准输入输出属性绑定方式,那就移除相关代码吧。...,并且 Angular 用来和 formControl同步,通常是使用组件或指令来注册。

    3.8K20

    Angular面试题_session面试题

    二十、angular 缺点有哪些? 1.强约束 导致学习成本较高,对前端不友好。 但遵守 AngularJS 约定时,生产力会很高,对 Java 程序员友好。...5.最根本好处 在 angular 1.2 以前,在 view 上任何绑定都是直接绑定在 $scope 上 function myCtrl($scope){ $scope.a = ‘aaa...function myCtrl(){ // 使用 vm 捕获 this 可避免内部函数在使用 this 时导致上下文改变 var vm = this; vm.a = ‘aaa’; }...injector 是假设函数参数名就是依赖名字,然后去查找依赖项,那如果按前面栗子中那样注入依赖,代码压缩后(参数重命名了),就无法查找到依赖项了。...函数中,如果指令要进行数据绑定,那么配置在link函数中。

    4.9K150

    进阶 | 重新认识Angular

    Vue使用发布订阅模式,是点对点绑定数据。 Proxy可以理解成,在目标对象之前架设一层“拦截”,外界对对象访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界访问进行过滤和改写。...Angular 核心:使用脏检测(新/旧值比较)Diff 当Model发生变化,会检测所有视图是否绑定了相关数据,再更改视图 Zone.js(猴子补丁:运行时动态替换) Javascript中异步任务包裹一层...模块化思想层层包裹,结构组织也层层地抽象封装,树结构设计思想从模块组织到依赖注入延伸。 模块修饰器 修饰器(Decorator)是一个函数,用来修改行为。...Promise需要调用then或者catch才能够执行,catch是另一种形式then,调用then或者catch之后,它返回一个新Promise,这样新Promise也可以同样调用,所以可以做成无限...Rxobservablesubscribe之后,并不是继续返回一个新observable,而是返回一个subscriber,这样用来取消订阅,但是这也导致了链式断裂,所以它不能像Promise那样组成无限

    2.6K10

    基础 | Angular2生命周期钩子函数

    比如,OnInit接口钩子方法叫做ngOnInit, Angular在创建组件后立刻调用它 生命周期执行顺序 ngOnChanges 在有输入属性情况下才会调用方法接受当前和上一属性值SimpleChanges...中新增属性,当class实例化时候调用constructor,来初始化。...Angular组件就是基于class实现,在Angular中,constructor用于注入依赖。 ngOnInit是Angular中生命周期一部分,在constructor后执行。...在Angular中用于初始化变量和数据绑定等 NgChanges 当我们监听了OnChanges钩子。...一旦检测到组件(或指令)输入属性发生了变化,Agular就会调用ngOnChanges()方法 效果演示 DoCheck 当组件中属性或函数发生变化时DoCheck会执行脏值检测,遍历所有变量

    77640

    前端面试题angular_Vue前端面试题

    这样会导致,在 ng-if 中用基本变量绑定 ng-model,并在外层 div 中把此 model 绑定给另一个显示区域,内层改变时,外层不会同步改变,因为此时已经是两个变量了。...配置 service,get 中返回,就是用 factory 创建 service 内容 从底层实现上来看,service 调用了 factory,返回其实例;factory 调用了 provider...,可以不返回(绑定到 this 都可以访问); provider 是加强版 factory,返回一个可配置 factory。...5angular 中控制器之间如何通信?...,所以必须进行一次大检查,所有“注册”过值全部检查一遍,一次检查称为一个周期,每次最少检查两遍,因为第二遍用来确认,前一遍变动中是否有数据变动,导致了其他数据变动,如果第二次有变动的话,会再执行一遍

    14.1K20

    AngularDart4.0 指南- 模板语法一 顶

    学习如何编写显示数据并在数据绑定帮助下使用用户事件模板。 Angular应用程序管理用户看到和可以做事情,通过组件实例(组件)和面向用户模板交互来实现这一点。...模板语句不能引用静态属性,也不能引用顶层变量或函数,如来自dart:htmlwindow或document 。 它们不能直接调用从dart:math导入print或函数。...绑定语法:概述 数据绑定是一种协调用户看到应用程序数据值机制。 虽然您可以值推送到HTML中,并从HTML中提取值,但是如果这些杂事转换为绑定框架,则应用程序更易于编写,读取和维护。...表达式语言本身是为了保证您安全。您不能为属性绑定表达式中任何东西赋值,也不能使用增量和减量运算符。 当然,表达式可能会调用具有副作用属性或方法。 Angular无法知道或阻止你。...表达式可以调用类似getFoo()东西。 只要你知道getFoo()是做什么。如果getFoo()改变了某些东西,而且碰巧绑定了某些东西,你冒着一定风险。

    5.2K10

    【干货】2017年值得关注JavaScript框架与主题

    Callbacks: 回调是JavaScript异步编程基本概念,某个回调函数会在某个异步操作结束后调用,就好比领导对你说:好好干你工作,做好了跟我汇报下。...Promises: Promise是处理将来值方法之一,当某个函数返回是Promise对象时,你可以调用对象then函数来获取异步传入值。...npm: 官方开源JavaScript包管理工具。 git & GitHub: 分布式版本管理系统,很适合团队协作。 Babel: 能够ES6代码编译到ES5使之能够兼容老版本浏览器。...这种单向数据流与当时以Angular 1 / Knockout为代表双向数据绑定形成对比,双向数据绑定中如果发现绑定数据发生变化则会立刻触发重渲染,而无论当前是否处于渲染流程中,这一点也就导致了Reflows...首先,我会去Google Trends中查看各个框架关联关键词搜索情况。 来源:中国物联网

    1.3K60

    Angular与MVVM框架

    作者更希望大家关注于实现一个成功,具有好设计以及遵循“分离关注点”原则应用程序,而不是去争论MV*,所以他angular称为MVW框架,是什么并不重要,只要适合你应用就行。...一旦找到一个,它就会被加入一个指令列表中,这个列表是用来记录所有和当前DOM相关指令。 一旦所有的指令都被确定了,会按照优先级排序,并且他们compile方法会被调用。...通过调用上一步所说链接函数模板与作用域链接起来。这会轮流调用每一个指令链接函数,让每一个指令都能对DOM注册监听事件,和建立对作用域监听。这样最后就形成了作用域DOM动态绑定。...更多可以参考[译]ng指令中compile与link函数解析 $digest $watch存储了监听函数,当作用域里变量发生变化时,调用$digest方法便会执行作用域以及它所有子作用域上相关监听函数...对于像游戏和有图形界面的编辑器之类应用,会进行频繁且复杂DOM操作,和CRUD应用不同。因此,可能不适合用Angular来构建。在这种场景下,使用更低抽象层次库可能会更好。

    3.9K90
    领券