html - .includes() 如果与之关联的变量没有变化,是否会在变化检测循环期间运行?/ 替代 .includes()
问题描述
我的组件文件中有一个变量 user_roles,它由 API 初始化,ngInit()
之后不会更改。
this.service.getUserRoles().subscribe(
data => {
this.user_roles = data;
}
)
user_roles 是一个数组,其中包含该用户的权限:user_roles = ['admin', 'mediator', ...]
在我的模板中,我有基于 user_role 显示组件的代码:
<div *ngIf="user_roles.includes('admins') || user_roles.includes('mediator')">
<div ....
.
.
.
.includes() 是否在每次其他变量更改并且更改检测循环运行时运行?如果是这样,那么我可以使用什么替代方法来提高性能?
解决方案
是的,它会的。
angular
更改检测并不意味着如果属性更改,则更新其依赖项。其实就是vue
这样。实际上,angular
变更检测意味着每次异步操作(Promise
event
setTimout
)发生时,重新评估每个模板绑定。所以是的,includes
将再次被调用。
最简单的验证方法如下
const orig = Array.prototype.includes
Array.prototype.includes = function<T> (arg: T) {
console.log(this, arg)
orig.call(this, arg)
}
推荐阅读
- amazon-web-services - 如何管理触发 AWS Lambda 函数的 AWS Cloud Watch 事件突发
- google-apps-script - Autofill empty arrays with dragging functions from last non-empty row in Col C
- python - getBit 函数没有给出正确的结果
- azure - 如何使用 REST API 从 VM 中获取 Azure 订阅和资源组?
- javascript - Vue.js + Vue2Leaflet: update computed property on map moveend
- javascript - why firebase admob is not showing ads on real device
- c++ - QT MYSQL drive build, undefined reference to `mysql_get_client_version@0'
- php - Symfony 测试 - 带有 Guard 身份验证的空令牌
- python - i'm using django 1.1 with python 2.7. cant display pdf in browser it pops a notification for download
- javascript - 两次相同的随机数