我正在尝试使用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) 我正在使用NX工具来管理包含多个应用程序的 monorepo,并且我正在努力了解如何使用 Azure 进行部署并发布管道。
免责声明:总的来说,我对 Azure 和 DevOps 非常陌生。
我的理解是:我创建一个管道(不是发布管道,只是一个“常规管道”,如果有意义的话)并插入一个 yml 到它。此外,管道链接到 Azure Repos 上的存储库,这意味着每次我推送到此存储库时,它都会触发管道并运行 yaml 命令。在这个命令上,我运行 lint、测试和构建。
这是我能做和能理解的,以下变得更加晦涩:
如果我在可以调节的主控上进行推送/合并,则构建作业应该会创建一个工件。现在我可以创建一个发布管道,当它链接到的存储库将创建一个工件时,该管道将被触发。然后,此发布管道可以将此工件发送到应用程序服务,该应用程序服务是应用程序所在的插槽。
好的,但我使用的是 monorepo,这意味着构建将生成多个应用程序,并且每个应用程序都应部署到正确的应用程序服务。
经过一番研究,我发现总体思路是为每个应用程序创建一个发布管道。这些发布管道都链接到同一个 monorepo,但它们有一个过滤器,即构建标签。使用 yml 文件构建应用程序时添加构建标签。
所以这些基本上就是我对这一切的理解。现在问题如下:
压缩和发布工件的正确方法是什么?
这是我正在使用的 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) 我正在尝试在启用了 RLS 的表中插入一行Enable insert for authenticated users only添加了策略。不幸的是,即使我正确登录,我也无法插入。
重现步骤:
create table submission (
stuff text
);
Run Code Online (Sandbox Code Playgroud)
alter table submissions
enable row level security
Run Code Online (Sandbox Code Playgroud)
CREATE POLICY "Enable insert for authenticated users only" ON public.submissions FOR INSERT WITH CHECK (auth.role() = 'authenticated');
Run Code Online (Sandbox Code Playgroud)
在客户端上,我使用魔术链接登录(该对象已正确添加到本地存储中,因此我知道我正在登录)
我尝试插入
const { data, error } = await supabase
.from("submissions")
.insert({ stuff: 'hello' });
Run Code Online (Sandbox Code Playgroud)
它Authorization Bearer <Jwt>存在于 http 调用中。
{
"hint":null,
"message":"new row violates row-level security policy for table \"submissions\"", …Run Code Online (Sandbox Code Playgroud) 向 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) 我正在尝试将服务的引用访问到我的静态方法中,如下所示:
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参考?
谢谢。
我有一个像这样的 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)
我怎样才能派遣updateFoo和updateBar仅当data.foo或data.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)
我希望派遣updateFoo时data.foo的变化和updateBar何时data.bar改变,知道data …
这是表格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导入到我的组件以及模块中.
我有一个用例,我需要订阅一个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) 我想知道在 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) 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) 我需要基于当前组件注入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类。
有任何想法吗?
谢谢。