您是否需要取消订阅Angular 2 http调用以防止内存泄漏?
fetchFilm(index) {
var sub = this._http.get(`http://example.com`)
.map(result => result.json())
.map(json => {
dispatch(this.receiveFilm(json));
})
.subscribe(e=>sub.unsubscribe());
...
Run Code Online (Sandbox Code Playgroud) 如何强制组件在Angular 2中重新渲染?出于调试目的,使用Redux我想强制组件重新渲染它的视图,这可能吗?
当我使用时--nolazy,我最终可以与IntelliJ异步调试,因为断点停在正确的位置.但我找不到任何关于--nolazy...的文档
什么--nolazy意思?
为什么Redux中的对象应该是不可变的?我知道一些框架如Angular2将使用onPush并且可以利用不变性来比较视图状态以便更快地呈现,但我想知道是否还有其他原因因为Redux是框架无关的,但它在自己的文档中提到使用不变性(无论框架如何).
感谢任何反馈.
为了更深入地了解Angular 2,我希望有人能够对组件,指令及其容器和视图的底层结构进行深入的解释/教程.
根据文档:
组件的容器可以包含两种视图.通过createComponent实例化组件创建的主机视图和通过createEmbeddedView实例化嵌入式模板创建的嵌入式视图.视图容器在包含视图中的位置由Anchor元素指定.每个视图容器只能有一个锚元素,每个锚元素只能有一个视图容器.附加到此容器的视图的根元素将成为"渲染视图"中"锚点元素"的兄弟元素.
这留下了许多未解决的问题,例如:
一个主机视图指的是组件驻留在元件和嵌入式视图指的是组件的模板本身?
在手动创建(通过createComponent)以及通过另一个托管组件(父级)以声明方式创建时,这两种情况都是如此吗?
指令也是如此,它没有模板(因此没有视图)?以及如何在Shadow dom环境(浏览器实际上支持组件主机)和模拟环境中如何工作?
Angular2确实做了很多魔术,并且为了成为一名专家,我希望更好地理解(可能通过可视化图表)整个关系:ViewContainerRef,主机视图,模板,嵌入式模板,ViewChild,ViewContainer及其层次结构组件和指令.
我认为自己非常精通Angular2(已经完成了2个大型项目)但仍然觉得我对下划线内部工作的理解存在漏洞.
当然你不需要知道汽车是如何驾驶汽车的,但如果你这样做,你会更好地处理它,
一如既往地谢谢,
肖恩
所以我调用了这个组件InputEdit(基本上是一个Label可以在你点击时编辑的......很简单),这个组件有自己的阴影DOM CSS样式.但是当然每个托管组件都想为输入组件设置自己的字体大小和颜色......
那么最好的方法是什么?你能直接传入一个样式类并将整个CSS应用到组件中吗?或者最好手动传递每个值,如下所示:
<InputEdit [color]="'red'"/>
Run Code Online (Sandbox Code Playgroud)
这似乎有很多工作,但是由于我们使用阴影或模拟DOM,我们不能只在外部控制CSS.
我也知道你可以通过以下方式拼接打开阴影并定位直接元素:
/* styles.css */
UserInfo /deep/ InputEdit label {
color: red;
font-size: 1.1em;
}
Run Code Online (Sandbox Code Playgroud)
这将基本上允许您进入名为UserInfo/deep(任何级别)/自定义组件的自定义组件InputEdit和目标标签,颜色为红色...
但同样,我想知道什么是专门针对ng2的最佳方法,比如将类配置传递给指令呢?
在Angular 2中,是否可以淡入/淡出而不是[hidden ='xxx]?
我有片段
<div [hidden]="visible">
Run Code Online (Sandbox Code Playgroud)
并希望它在明显变化时淡出......
TX
肖恩
在Angular2中如何知道任何输入字段何时失去焦点..!如果我在表单上使用observable:
form.valueChange.subscribe...
Run Code Online (Sandbox Code Playgroud)
不会工作,因为我真的想知道什么时候一个字段丢失它的模糊(焦点)所以我可以更新我的商店(如果我在失去焦点之前更新商店,我的光标在文本输入上移动到最后,因为数据被交换这看起来很奇怪)
当然我也可以添加(change)=""每个输入,但我有很多'...
我在考虑各种各样的事情:
this.form.valueChanges.debounceTime(1000).subscribe((changes:any) => {
if (this.form.dirty){
this.appStore.dispatch(this.resellerAction.updateResellerInfo(changes))
}
});
Run Code Online (Sandbox Code Playgroud)
但问题是脏污仍然很脏,所以它陷入了永久性的变化检测循环......
TX
肖恩
angular ×7
rxjs ×2
immutability ×1
javascript ×1
memory-leaks ×1
node.js ×1
reactjs ×1
redux ×1
rxjs5 ×1
typescript ×1