如何强制组件在Angular 2中重新渲染?出于调试目的,使用Redux我想强制组件重新渲染它的视图,这可能吗?
我有一个Angular 2服务:
import {Storage} from './storage';
import {Injectable} from 'angular2/core';
import {Subject} from 'rxjs/Subject';
@Injectable()
export class SessionStorage extends Storage {
private _isLoggedInSource = new Subject<boolean>();
isLoggedIn = this._isLoggedInSource.asObservable();
constructor() {
super('session');
}
setIsLoggedIn(value: boolean) {
this.setItem('_isLoggedIn', value, () => {
this._isLoggedInSource.next(value);
});
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.但我有另一个不需要订阅的组件,它只需要在某个时间点获取isLoggedIn的当前值.我怎样才能做到这一点?
我知道这是一个普遍的问题,但我没有在Angular 2上传文件.我试过了
1)http://valor-software.com/ng2-file-upload/和
2)http://ng2-uploader.com/home
......但失败了.有人在Angular上传过文件吗?你用了什么方法?怎么办?如果提供任何示例代码或演示链接,我们将非常感激.
为了学习Angular 2,我正在尝试他们的教程.
我收到这样的错误:
(node:4796) UnhandledPromiseRejectionWarning: Unhandled promise rejection (r ejection id: 1): Error: spawn cmd ENOENT
[1] (node:4796) DeprecationWarning: Unhandled promise rejections are deprecated.
In the future, promise rejections that are not handled will terminate the Node.
js process with a non-zero exit code.
Run Code Online (Sandbox Code Playgroud)
我在SO中经历了不同的问题和答案,但无法找出"未处理的承诺拒绝"是什么.
任何人都可以简单地解释一下它是什么Error: spawn cmd ENOENT,也是什么,当它出现时,我必须检查以摆脱这个警告?
如何在角度2中测试私有函数?
class FooBar {
private _status: number;
constructor( private foo : Bar ) {
this.initFooBar();
}
private initFooBar(){
this.foo.bar( "data" );
this._status = this.fooo.foo();
}
public get status(){
return this._status;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现的解决方案
将测试代码本身放在闭包中或在闭包内添加代码,该代码存储对外部作用域中现有对象的局部变量的引用.
稍后使用工具删除测试代码. http://philipwalton.com/articles/how-to-unit-test-private-functions-in-javascript/
如果您有任何问题,请建议我更好的方法来解决这个问题?
PS
像这样的类似问题的大部分答案都不能解决问题,这就是我问这个问题的原因
大多数开发人员都说你不测试私人功能,但我不是说他们错了或是对的,但我的案例有必要对私人进行测试.
我知道我可以这样称呼管道:
{{ myData | date:'fullDate' }}
Run Code Online (Sandbox Code Playgroud)
这里的日期管道只有一个参数.从组件的模板HTML和直接在代码中调用具有更多参数的管道的语法是什么?
我在隐藏和显示一个元素时遇到问题,该元素取决于Angular 2中的布尔变量.
这是显示和隐藏div的代码:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
Run Code Online (Sandbox Code Playgroud)
变量被"编辑"并存储在我的组件中:
export class AppComponent implements OnInit{
(...)
public edited = false;
(...)
saveTodos(): void {
//show box msg
this.edited = true;
//wait 3 Seconds and hide
setTimeout(function() {
this.edited = false;
console.log(this.edited);
}, 3000);
}
}
Run Code Online (Sandbox Code Playgroud)
元素被隐藏,当saveTodos函数启动时,元素会显示,但是3秒后,即使变量返回false,元素也不会隐藏.为什么?
我希望Angular 2在Typescript语言中随处可以访问一些变量.做这个的最好方式是什么?
查看angular2代码示例,我们看到一些带有$ sign的公共属性:
<....>
private missionAnnouncedSource = new Subject<string>();
private missionConfirmedSource = new Subject<string>();
// Observable string streams
missionAnnounced$ = this.missionAnnouncedSource.asObservable();
missionConfirmed$ = this.missionConfirmedSource.asObservable();
<....>
Run Code Online (Sandbox Code Playgroud)
谁能解释一下:
在官方风格指南中似乎没有任何相关内容吗?
我想知道我是否可以在配置文件中设置主机和端口,所以我不必输入
ng serve --host foo.bar --port 80
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
ng serve
Run Code Online (Sandbox Code Playgroud) angular ×10
javascript ×3
typescript ×3
angular-cli ×1
es6-promise ×1
file-upload ×1
jasmine ×1
rxjs ×1
spawn ×1
unit-testing ×1