小编Sam*_*gun的帖子

将组件动态附加到 Angular 5 中的 div

我有这个

https://angular-dynamic-component-append.stackblitz.io/

我设法动态附加了一个元素,但它没有被编译。我看到很多教程像这样

但这并不是我真正需要的。他们经常使用标签符号来识别容器。

我需要将一个组件附加到任何可能包含我的自定义指令的元素。

我还需要使用指令的绑定值来控制附加元素上的 [hidden] 属性。

目标

  1. 覆盖现有组件的行为:
    • 添加属性以显示/隐藏
    • 添加一个类来自定义外观
  2. 减少html编码
    • 无需编写整个组件 <my-comp></mycomp>
    • 不需要知道班级
    • 更改类名时的自动行为
      1. 更改应用指令的元素
    • 最终目标是向 contaner 元素添加一个类

预期来源

<div [myDirective]="myBoolean">
    <p>some content</p>
</div>
Run Code Online (Sandbox Code Playgroud)

预计编译

<div [myDirective]="myBoolean" class="myDirectiveClass1">
    <p>some content</p>
     <someComponent [hidden]="myBoolean" class="myDirectiveClass2"></someComponent>
</div>
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标?

先感谢您

typescript angular-directive angular angular5

8
推荐指数
2
解决办法
3万
查看次数

@typescript-eslint/member-ordering 不起作用

我试图在打字稿类中进行严格的排序,强制对组进行精确的排序,特别是我想强制按字母顺序排序。

我正在遵循此文档来实现我所需要的:https://typescript-eslint-armano.netlify.app/rules/member-ordering/#sorting-alphabetically-within-member-groups

这是我的 .eslintrc 配置提取的成员排序配置

"@typescript-eslint/member-ordering": [
      "error",
      {
          "default": {
            "memberTypes": [
              "public-static-field",
              "protected-static-field",
              "private-static-field",
              "public-instance-field",
              "public-decorated-field",
              "public-abstract-field",
              "protected-instance-field",
              "protected-decorated-field",
              "protected-abstract-field",
              "private-instance-field",
              "private-decorated-field",
              "private-abstract-field",
              "static-field",
              "public-field",
              "instance-field",
              "protected-field",
              "private-field",
              "abstract-field",
              "constructor",
              "public-static-method",
              "protected-static-method",
              "private-static-method",
              "public-method",
              "protected-method",
              "private-method"
            ],
            "order": "alphabetically"
          }
      }
    ],
Run Code Online (Sandbox Code Playgroud)

这不会在我的类中产生任何错误,而我预计会出现 2 个错误:错误的成员排序(私有应该在公共之后)和错误的字母顺序。

没有错误

Eslint 运行良好,因为我遇到了其他错误,例如命名约定等

json rules typescript eslint

8
推荐指数
1
解决办法
9973
查看次数

jQuery Ajax访问自定义响应头

我正在使用一些API,我注意到在响应中我有这个:

Chrome控制台屏幕

我需要阅读"x-dl-units-left",但我得到null:

$.ajax(ajaxConfig).done(function(response, textStatus, xhr){
  var left = xhr.getResponseHeader("x-dl-units-left"); //null
  var all = xhr.getAllResponseHeaders(); // "content-type: application/json;charset=UTF-8"
});
Run Code Online (Sandbox Code Playgroud)

谁可能知道为什么?:(

谢谢

javascript ajax jquery response-headers jqxhr

5
推荐指数
2
解决办法
3114
查看次数

Angular 5 Class通过注入扩展了类

我创建了这样的课程

@Injectable FooService {

    constructor(private _bar:BarService){

    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样扩展它

@Injectable ExtFooService extends FooService {

    constructor(private _bar:BarService){
        super(_bar);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,我得到以下错误:

错误:(12、14)TS2415:Class'ExtFooService'错误地扩展了基类'FooService'。类型具有私有属性“ _bar”的单独声明。

为什么?

我试着从ExtFooService中删除注入,但是我得到了这一点super()

错误:(21,9)TS2554:期望2个参数,但得到0。

我真的有必要这样做吗?

@Injectable ExtFooService extends FooService {

    constructor(private _extBar:BarService){
        super(_extBar);
    }
}
Run Code Online (Sandbox Code Playgroud)

extends dependency-injection typescript angular5

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

Angular 5 ngSubmit @Output 触发两次

定制组件

// ...

@Output() submit: EventEmitter < any > = new EventEmitter();

// ...

onFilterSubmit($event): void {
  this.submit.emit($event);
  this.formData = {
    minDate: new Date().toISOString(),
    maxDate: new Date().toISOString()
  };
}
Run Code Online (Sandbox Code Playgroud)
<form (ngSubmit)="onFilterSubmit(formData)">

    <!-- -- -->
    <button mat-button
        mat-raised-button
        [disabled]="reqsForm.form.invalid" 
        type="submit"
        color="primary">
        {{labels.submit}}
    </button>
</form>
Run Code Online (Sandbox Code Playgroud)

外部组件

// ...

onFilterSubmit($event): void {
  console.info("FORM SUBMIT", $event);
}
Run Code Online (Sandbox Code Playgroud)
<custom-component (submit)="onFilterSubmit($event)">

  <!-- -- -->

</custom-component>
Run Code Online (Sandbox Code Playgroud)

输出

FORM SUBMIT > Object

FORM SUBMIT > Object

events components output angular5

3
推荐指数
1
解决办法
1174
查看次数

Angular5 http最佳做法

我正在使用Angular 5构建一些应用程序(是的,不止一个).我正在尝试遵循所有Angular dos和don'ts

但我无法理解一些事情

1)这个之间的区别......

this._http.get<User>(this._ubiRest.servicesUrls.getUser)
Run Code Online (Sandbox Code Playgroud)

...还有这个

this._http.get(this._ubiRest.servicesUrls.getUser)
Run Code Online (Sandbox Code Playgroud)

如果反正我必须使用map方法来强制转换为User(或者我可能不会?)

2)在服务中这样做会更好......

getUserData(): Observable<User> {

        return new Observable((observable) => {

            if (!!this._loggedUser) {
                observable.next(this._loggedUser);
                observable.complete();
            }
            else {
                this._http.get(this._ubiRest.servicesUrls.getUser)
                    .map(this._extractData)
                    .subscribe(user => {
                        this._loggedUser = user;
                        observable.next(user);
                        observable.complete();
                    }, this._handleError);
            }

        })
    }
Run Code Online (Sandbox Code Playgroud)

...或这个?

getUserDataX(): Observable<User> {
    if (!!this._loggedUser) {
        return new Observable(observable => {
            observable.next(this._loggedUser);
            observable.complete();
        });
    }
    else {
        return this._http.get<User>(this._ubiRest.servicesUrls.getUser)
           .map(this._extractData)
           .catch(this._handleError);
    }
}
Run Code Online (Sandbox Code Playgroud)

rest observable typescript angular angular5

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