小编vin*_*nce的帖子

ViewChild和ContentChild的所有有效选择器是什么?

我正在寻找一个完整的有效选择器列表,我可以通过@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

angular

28
推荐指数
2
解决办法
1万
查看次数

使用 jasmine.createSpyObj 实用程序构建 SpyObj 时声明 getter 属性?

假设我有一堂课:

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()方法(第二个参数是方法。

这可能吗?

testing jasmine

7
推荐指数
1
解决办法
3541
查看次数

如何处理“EmptyError:序列中没有元素”?

我的问题与Angular 路由器错误无关。

我有一个可以拖放的组件。拖放功能的代码如下所示:

@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)

现在它不再显示在控制台中,但故意吞下错误似乎......很糟糕。 …

rxjs angular

4
推荐指数
1
解决办法
4636
查看次数

Angular Reactive Form的深层副本?

我正在尝试构建一个能够生成给定副本的函数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)

recursion clone typescript angular angular-reactive-forms

2
推荐指数
4
解决办法
7787
查看次数