我已经在Angular 2上使用ImmutableJS有一段时间了,因为它在变化检测方面的性能优势。看这里。
然而,我不太清楚,为什么Immutable在默认情况下与Angular 2一起工作。当没有显式数组时,它如何知道如何迭代值并显示它们?它是否每次访问集合的值时都调用toJS()
?它实现了Angular 2自动调用的某种方法吗?
如果是这样的话,有没有一种方法可以定义您自己的集合来实现这个方法?
例如:
Component({
selector: 'list',
template: '<ul><li *ngFor="#item of items">{{ item.id }}</li></ul>',
directives: [CORE_DIRECTIVES]
})
export class SiteComponent {
items: Immutable.List<Item>;
}
我不是Angular用户,但我认为很容易看到下面发生了什么:我假设
ngFor="#item of items"
转换为for... of
循环的等效形式。此构造可用于迭代数组,但也可用于一般情况下的任何迭代。(是的,不可变。List
正确实现可迭代协议)
一些优质资源:
SO上的可迭代协议:
检查某物是否合适
深度迭代协议:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols
最后:
如果您想100%确定,请创建一个简单的可写结构,但它既不是Array
也不是不可变的。列表
,因此Angular不知道如何迭代它,只能使用iterable协议(需要babel
或新版本的node
):
'use strict'
let obj = {}
// obj is iterable with values 1, 2, 3
obj[Symbol.iterator] = function() {
console.log('Yes, I am using the iterable protocol indeed')
return [1, 2, 3][Symbol.iterator]()
}
for (let i of obj) {
console.log(i) // prints 1, 2, 3
}
现在,如果您使用此结构而不是不可变。列表
,您可以很容易地看到调用了迭代器。
我试图在一个我的组件中使用Tesseract来执行文件上的ocr。 .ts: .html 我遵循了这个,但是这个错误显示了 我应该怎么做才能让这个工作成功?
问题内容: 继续我提出的问题,我试图在我的代码库中使用ThreadPoolExecutor。即使反复尝试从Java API文档中理解,我也无法清楚地理解keepAliveTime要在构造函数中传递的参数的功能/目的。希望有人可以通过一些很好的例子向我解释。 Java文档摘录: keepAliveTime-当线程数大于内核数时,这是多余的空闲线程将在终止之前等待新任务的最长时间。 问题答案: 假设您
我想知道是否有人可以帮助我理解如何将转换表合并到Hypermax算法中。任何示例、伪代码、技巧或实现参考都将不胜感激! 一点背景: Hypermax是一种递归游戏树搜索算法,用于n人游戏,通常用于3人游戏。它是最小最大和α-β修剪的扩展 通常,在游戏树中的每个节点,当前玩家(选择者)将查看其可以做出的所有移动,并选择一个最大化其自身效用的移动。不同于最小值/最大值 我理解换位表是如何工作的,但我不
我只是很难让我的控制器单元测试正常工作,因为在我看来,如果使用OAuth,SpringDoc中的内容是不够的。在我的例子中,是Oauth2和JWT。 我尝试使用,,甚至使用和自定义定义我自己的注释,但在计算安全表达式时,总是在UserSecurityContext中获得匿名用户,无论我在工厂中设置测试上下文的是什么。。。 我提出了我刚刚想到的解决方案,但由于我不确定嘲笑令牌服务是最有效/干净的方法
我的pom。xml如下所示 我已经尝试了三天,使用REdhat入门指南让这个简单的示例代码与Infinispan一起使用,并下载了快速入门zip来运行它,但仍然不起作用!我一直收到Spring JMS的错误“无法连接到foo: 11222”或“池未打开”,然后是关于混合Uber和Jars版本的警告。我开始使用ehcache,这很难实现,因为只有有限的简单示例展示了如何从rest调用等中存储、检索和
我正在尝试用库制作一个程序。 当我尝试访问一个头函数时,我得到了一个错误。 main.cpp: 测试h: 我是初学者,所以我真的不知道如何修复它或它的可能性。