小编Gre*_*eye的帖子

库的 stylePreprocessorOptions,我应该把它放在 angular.json 的什么位置?

我正在尝试使用stylePreprocessorOptions以便为库项目包含到我的变量文件夹的路径,如下所示:

"stylePreprocessorOptions": {
  "includePaths": [
    "styles/variables"
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后我@import 'colors';在 scss 文件中使用。但它在做时不起作用ng serve

@import 'colors';
       ^
      Can't find stylesheet to import.
Run Code Online (Sandbox Code Playgroud)

这是 angular.json 中的完整库:

        "ui-table": {
            "root": "libs/ui/table",
            "sourceRoot": "libs/ui/table/src",
            "projectType": "library",
            "prefix": "xxx",
            "architect": {
                "build": {
                    "builder": "@angular-devkit/build-ng-packagr:build",
                    "options": {
                        "tsConfig": "libs/ui/table/tsconfig.lib.json",
                        "project": "libs/ui/table/ng-package.json",
                        "stylePreprocessorOptions": {
                            "includePaths": [
                                "styles/variables"
                            ]
                        }
                    }
                },
                "lint": {
                    "builder": "@angular-devkit/build-angular:tslint",
                    "options": {
                        "tsConfig": ["libs/ui/table/tsconfig.lib.json"],
                        "exclude": ["**/node_modules/**"]
                    }
                }
            },
            "schematics": {
                "@nrwl/schematics:component": { …
Run Code Online (Sandbox Code Playgroud)

angular

13
推荐指数
1
解决办法
2536
查看次数

如何使用 Azure 和 NX 部署多个应用程序 (monorepo)

我正在使用NX工具来管理包含多个应用程序的 monorepo,并且我正在努力了解如何使用 Azure 进行部署并发布管道。

免责声明:总的来说,我对 Azure 和 DevOps 非常陌生。

我的理解是:我创建一个管道(不是发布管道,只是一个“常规管道”,如果有意义的话)并插入一个 yml 到它。此外,管道链接到 Azure Repos 上的存储库,这意味着每次我推送到此存储库时,它都会触发管道并运行 yaml 命令。在这个命令上,我运行 lint、测试和构建。

这是我能做和能理解的,以下变得更加晦涩

如果我在可以调节的主控上进行推送/合并,则构建作业应该会创建一个工件。现在我可以创建一个发布管道,当它链接到的存储库将创建一个工件时,该管道将被触发。然后,此发布管道可以将此工件发送到应用程序服务,该应用程序服务是应用程序所在的插槽。

好的,但我使用的是 monorepo,这意味着构建将生成多个应用程序,并且每个应用程序都应部署到正确的应用程序服务。

经过一番研究,我发现总体思路是为每个应用程序创建一个发布管道。这些发布管道都链接到同一个 monorepo,但它们有一个过滤器,即构建标签。使用 yml 文件构建应用程序时添加构建标签。

所以这些基本上就是我对这一切的理解。现在问题如下:

  1. 构建标签到底是什么?它位于哪里?它是否以某种方式与文物相关?
  2. 这个想法是为每个工件创建一个构建标签,对吧?
  3. 我无法创建构建标签,该怎么办?
  4. 压缩和发布工件的正确方法是什么?

    这是我正在使用的 yaml:

jobs:
  - job: Lint
    steps:
      - task: NodeTool@0
        inputs:
          versionSpec: '12.x'
        displayName: 'Install Node.js'
      - task: Npm@1
        displayName: 'Npm install'
      - pwsh: 'npm run nx affected -- --target=lint --parallel --base=origin/master --maxParallel=4'
        displayName: 'Running lint'

  - job: Test
    steps:
      - task: …
Run Code Online (Sandbox Code Playgroud)

azure-devops monorepo

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

无法插入到 Supabase 中具有经过身份验证的角色策略的表

我正在尝试在启用了 RLS 的表中插入一行Enable insert for authenticated users only添加了策略。不幸的是,即使我正确登录,我也无法插入。

重现步骤:

  1. 创建提交表
create table submission (
  stuff text
);
Run Code Online (Sandbox Code Playgroud)
  1. 启用 RLS
alter table submissions
  enable row level security
Run Code Online (Sandbox Code Playgroud)
  1. 添加策略
CREATE POLICY "Enable insert for authenticated users only" ON public.submissions FOR INSERT WITH CHECK (auth.role() = 'authenticated');
Run Code Online (Sandbox Code Playgroud)
  1. 在客户端上,我使用魔术链接登录(该对象已正确添加到本地存储中,因此我知道我正在登录)

  2. 我尝试插入

const { data, error } = await supabase
 .from("submissions")
 .insert({ stuff: 'hello' });
Run Code Online (Sandbox Code Playgroud)

Authorization Bearer <Jwt>存在于 http 调用中。

  1. 但我得到了错误
{
  "hint":null,
  "message":"new row violates row-level security policy for table \"submissions\"", …
Run Code Online (Sandbox Code Playgroud)

supabase

6
推荐指数
1
解决办法
3299
查看次数

“JSON 输入意外结束” Angular 5

向 API 发送 GET 请求时,我总是收到错误(因此响应将落入 CATCH 而不是 TRY),即使强硬状态为 200。

这是请求:

// Check if user exists at blur on email input authentication
checkUserExists( platformId: string, email: string) {
    return this.http.get(checkUserExistsAPI + `/${platformId}/${email}`);
}
Run Code Online (Sandbox Code Playgroud)

当我使用 Angular 5 时,我去掉了 .map(res)。

这是使用请求的函数:

// Verify if emails exists
verifyEmail(email) {
    if (email) {
        this.authenticationService.checkUserExists( this.platformId, email )
            .subscribe(
                (data: CheckEmailResponse) => {
                    console.log(data);
                },
                (error: CheckEmailResponse) => {
                    console.log(error);

                }
            );
    }
}
Run Code Online (Sandbox Code Playgroud)

它永远不会 console.log(data) 因为我总是收到这个错误:

error:{
    error: SyntaxError: Unexpected end of JSON input at …
Run Code Online (Sandbox Code Playgroud)

angular

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

在Angular 5中将服务访问为静态方法

我正在尝试将服务的引用访问到我的静态方法中,如下所示:

export class myComponent {
  constructor(private backend: BackendService) { }

  public static myMethod() {
  myComponent.backend.getData()
    .subscribe(
      data => { console.log(data)   },
      error => { console.error(error); }
  );
 }
}
Run Code Online (Sandbox Code Playgroud)

我越来越 Property backend doesn't exist on type 'typeof myComponent'

如何获取backend参考?

谢谢。

typescript

5
推荐指数
1
解决办法
2304
查看次数

仅当 Rxjs 轮询上的某些属性发生更改时才调度 NgRx 操作

我有一个像这样的 Rxjs 轮询效果:

updateProductData$ = createEffect(() =>
  this.actions$.pipe(
    ofType(fromActions.loadProduct),
    switchMap(_) =>
      this.http.get('endpoint').pipe(
        delay(1000),
        repeat(),
        switchMap((data) => [
          fromActions.updateFoo({foo: data.foo}),
          fromActions.updateBar({bar: data.bar}),
        ])
      )
    )
  );

Run Code Online (Sandbox Code Playgroud)

我怎样才能派遣updateFooupdateBar仅当data.foodata.bar分别改变?

我可以通过使用来改进这一点distinctUntilChanged,这样做的话data.stuff,如果发生变化,动作不会触发,但是,当任何一个动作发生变化时,这两个动作仍然会调度。

...
     repeat(),
     distinctUntileChanged((prev, curr) => prev.foo === curr.foo && prev.bar === curr.bar) // works but it fires both actions when either one changes
     switchMap((data) => [
       fromActions.updateFoo({foo: data.foo}),
       fromActions.updateBar({bar: data.bar}),
     ])
Run Code Online (Sandbox Code Playgroud)

我希望派遣updateFoodata.foo的变化和updateBar何时data.bar改变,知道data …

rxjs ngrx angular

5
推荐指数
0
解决办法
75
查看次数

属性绑定matHeaderRowDef未被嵌入式模板上的任何指令使用

这是表格html:

<mat-table matSort class="inbox__messages" #table [dataSource]="dataSource">

<!-- Building Column -->
<ng-container matColumnDef="building">
  <mat-header-cell *matHeaderCellDef>
  <div class="inbox__messages__header">
    <h3 class="inbox__messages__header-label">Bâtiments</h3>
    <mat-form-field class="inbox__messages__dropdown">
      <mat-select placeholder="Choisir un bâtiment">
        <mat-option *ngFor="let building of buildings" [value]="building.value">
          {{ building.viewValue }}
        </mat-option>
      </mat-select>
    </mat-form-field>
  </div>
  </mat-header-cell>
  <mat-cell *matCellDef="let element">
  <span class="inbox__messages__body-building">{{element.building}}</span>
</mat-cell>
</ng-container>

 <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;" matRipple class="element-row" [class.expanded]="expandedElement == row"
(click)="expandedElement = row"></mat-row>
Run Code Online (Sandbox Code Playgroud)

ng测试时会发生此错误.我错过了什么?我已将MatHeaderRowDef导入到我的组件以及模块中.

angular-material2 angular

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

在 Angular 的循环中订阅一个 observable

我有一个用例,我需要订阅一个Observable然后循环响应,以便Observable使用第一个Observable.

  getTasks(taskType: Observable<any>): void {
    taskType // Subscribing to the first Observable
      .subscribe(
        (tasks: any) => {
          let row: InboxTasks;
          for (const task of tasks) { // Looping through the result
            if (task.assigned_id) { // I need to extract that data in order to use it as an argument of the second Observable below
              this.auth.getUserById(task.assigned_id).subscribe((user) => this.username = `${user.firstname} ${user.lastname}`);
            }
            row = {
              assigned: this.username ? this.username : '', // Here I use …
Run Code Online (Sandbox Code Playgroud)

rxjs angular

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

Angular 库与 Angular 模块在 monorepo 中的优势?NX架构

我想知道在 Angular 中使用库而不是模块有什么好处,因为 nx.dev 建议使用 monorepo 架构。

我理解 npm 可发布功能的好处,比如另一个 repo 将使用的接口,但是为什么我要从业务相关的功能中创建一个库,比如主页,例如:

myorg/
??? apps/
?   ??? todos/
?   ??? todos-e2e/
??? libs/
      ??? todos/
        ??? home/   <-- why nx recommends making a library here?
          ??? src/
            ??? lib/
              ??? home.component.html/ts/scss
              ??? home.module.ts
??? tools/
??? README.md
??? workspace.json
??? nx.json
??? package.json
Run Code Online (Sandbox Code Playgroud)

而不是

myorg/
??? apps/
?   ??? todos/
         [...]
         ??? home/   <-- just a simple lazy loaded module here
           ??? home.component.html/ts/scss
           ??? home.module.ts
?   ??? todos-e2e/
??? libs/ …
Run Code Online (Sandbox Code Playgroud)

angular nrwl-nx

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

使用 ngrx 和选择器等待资源加载到守卫中

TLDR:我有一个isLoading选择器,我想在我的守卫中使用它来仅在此选择器为假时激活路线。

这是减速器:


export const initialState: State = {
  loaded: false,
  loading: false,
  success: {
    [...]
  }
};


export const reducer = createReducer(
  initialState,

  on(
    fromApiActions.loadRequest,
    (state): State => ({
      ...state,
      loading: true
    })
  ),

  on(
    fromApiActions.loadRequestSuccess
    (state, partialState): State => ({
      ...state,
      loaded: true,
      loading: false,
      success: {
        ...state.success,
        ...partialState
      }
    })
  ),

  on(
    fromApiActions.loadRequestFail,
    (state): State => ({
      ...state,
      loaded: false,
      loading: false
    })
  )
);


Run Code Online (Sandbox Code Playgroud)

我有一个loading从状态中选择的选择器。在引导应用程序时,我正在调度LoadRequest变为loadingtrue 的操作。

这是我的守卫:

export class …
Run Code Online (Sandbox Code Playgroud)

rxjs ngrx angular

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

获取Angular 5中的当前组件

我需要基于当前组件注入css类。即:如果我当前正在使用LoginComponent,则需要将login类注入到app.component.html(我的应用程序的较大父级)中。像这样:

<div class="content login">
    <router-outlet></router-outlet>
</div>
Run Code Online (Sandbox Code Playgroud)

我不知道最佳做法是什么。我还可以基于url进行注入。即:如果url为xxx./login,则注入loginCSS类。

有任何想法吗?

谢谢。

angular

0
推荐指数
1
解决办法
3208
查看次数