我正在寻找一个完整的有效选择器列表,我可以通过@ViewChild和来访问子组件/ DOM元素@ContentChild.
说我有一个孩子HelloComponent:
我知道我可以#ref为它添加模板和查询,如下所示:
<hello #myHello></hello>
@ViewChild('myHello') myHello: HelloComponent;
Run Code Online (Sandbox Code Playgroud)
或者我可以直接查找该组件(没有模板#ref):
@ViewChild(HelloComponent) myHello: HelloComponent;
Run Code Online (Sandbox Code Playgroud)
在本期中,提到可以使用以下选择器:
我们目前支持CSS选择器的一个子集:
*元素选择器
*属性选择器(包括值)
*:not(...)伪选择器
*上面的组合(包括,)
但是当我在Stackblitz中测试这些以验证时(这是它的链接),我实际上无法让前三个中的任何一个工作.(检查控制台以查看undefined我无法工作的选择器类型.我不确定这些选择器是否出错或者实际列表是否不同.)
那么,哪些选择器会起作用?此外,在名单同样为@ViewChild,@ContentChild,@ViewChildren,和@ContentChildren?
假设我有一堂课:
class MyRealClass {
get propOne() { return stuffFromTheServer; }
}
Run Code Online (Sandbox Code Playgroud)
测试时,我想实现这个功能:
const mockClass = {
get propOne() { return someStuff; }
}
jasmine.spyOnProperty(mockClass, 'propOne', 'get');
Run Code Online (Sandbox Code Playgroud)
通过做这样的事情......
const spy = jasmine.createSpyObj('mockClass', [
{methodName: 'propOne', accessType: 'get'}
]);
Run Code Online (Sandbox Code Playgroud)
换句话说,我想构建一个SpyObj<MyRealClass>usingjasmine.createSpyObj并将 getter 属性声明为methodName数组中的createSpyObj()方法(第二个参数是方法。
这可能吗?
我有一个可以拖放的组件。拖放功能的代码如下所示:
@HostListener('mousedown')
onMousedown(): void {
const mousemove$ = Observable.fromEvent(document, 'mousemove');
const mouseup$ = Observable.fromEvent(document, 'mouseup');
const modifiedMouseMove$ = mousemove$
.map(some transformations)
.takeUntil(mouseup$);
modifiedMouseMove$.subscribe(do something on each move);
modifiedMouseMove$.last().subscribe(drop the item)
}
Run Code Online (Sandbox Code Playgroud)
如果我只是“单击”该项目,我会得到:
Error: EmptyError { message: 'no elements in sequence', ... }
Run Code Online (Sandbox Code Playgroud)
我假设问题是当我单击时,它会触发 a ,其间mousedown -> mouseup没有任何事件。mousemove导致modifiedMouseMove$为“空”并且调用.last()不返回任何内容。此错误不会影响我的应用程序的功能。我可以抓住它而不做任何事情:
modifiedMouseMove$.last().subscribe(() => drop the item, (err) => {
if (err.name === 'EmptyError') {
return;
} else {
throw err;
}
});
Run Code Online (Sandbox Code Playgroud)
现在它不再显示在控制台中,但故意吞下错误似乎......很糟糕。 …
我正在尝试构建一个能够生成给定副本的函数FormGroup.我开始时:
function copyForm(form: FormGroup): FormGroup {
const copy = new FormGroup({});
for (let key of Object.keys(form.value)) {
const control = form.controls[key];
/* Copy the data from the control into a new control */
const copyControl = new FormControl({[key]: control.value});
copy.addControl(key, copyControl);
}
Run Code Online (Sandbox Code Playgroud)
但如果有一个FormArray或那个,这不起作用FormGroup.如果它是递归的,这个可能会起作用,但我无法很好地处理它.
我也试图解决它
function copyForm(form: FormGroup): FormGroup {
const copy = new FormGroup({});
for (let key of Object.keys(form.value)) {
const control = form.controls[key];
const copyControl = new FormControl({...control.value});
copy.addControl(key, …Run Code Online (Sandbox Code Playgroud)