我正在使用webpack为npm包生成适当的文件,这将包含一些反应组件.他们附加了一些CSS,引用了一些字体和图标.
使用file加载程序时,这些资产会使用fonts/my-font.woff主应用程序中缺少的绝对路径(即)进行错误引用.
有没有办法解决这个问题,让我的主应用程序寻找合适的文件?我宁愿修复软件包本身而不是像有人提到的那样复制资产,因为我可能无法完全控制主应用程序.
这是我的代码.
import { injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/catch';
@Injectable({
providedIn: 'root'
})
export class PostsService {
private url = 'https://jsonplaceholder.typicode.com/posts';
constructor(private http : Http ) { }
getPosts {
return this.http.get(this.url);
}
deletePost(id) {
return this.http.get(this.url + '/' + id);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在我的电脑上执行此代码它正在工作,但没有在笔记本电脑上工作.这看起来很有趣,但这是事实.
这是我项目的结构
我正在导入和HttpClient在服务中使用,如下所示:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root',
})
export class MyService {
constructor(private http: HttpClient) { }
getData() {
return this.http.get("url...");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我ng test为单元测试运行时,以及那些测试使用该服务时,出现了以下错误:
Error: StaticInjectorError(DynamicTestModule)[HttpClient]:
StaticInjectorError(Platform: core)[HttpClient]:
NullInjectorError: No provider for HttpClient!
HTTP上的Angular 6文档只是说了做我上面的事情。
这里已经存在类似的问题(设置初始值Angular 2 reactive formarray)但我对答案不满意或者可能正在寻找其他解决方案.
我认为使用FormArray的重点是传递对象数组,它应该创建相同数量的组件.但是在上面的示例中,如果查看提供的plunker,即使提供了两个Addresses对象,也会创建一个Address,因为它的空白版本已经在ngOnInit()中创建.
所以我的问题是,如果在ngOnInit()我有这样的地址:this._fb.array([])//空白列表,那么我该如何设置它的值,它动态地从N个地址创建N个地址在我的TypeScript数组中?
javascript forms reactive-forms angular angular-reactive-forms
我是Angular的新手.我正在使用角度4反应形式,并想出如何执行自定义验证.以下是我对数字的实现
function numberValidator(c: AbstractControl): { [key: string]: boolean } | null {
if (c.pristine) {
return null;
}
if (c.value.match(/.*[^0-9].*/)) {
return { 'numeric': true };
}
return null;
}
phoneControl: ['', [Validators.required, Validators.minLength(10), Validators.maxLength(10), numberValidator]],
Run Code Online (Sandbox Code Playgroud)
我试图找出如何执行货币(有或没有两位小数)和最重要的日期字段.
原谅我,如果这在其他地方得到解答,但我找不到任何角度样本(4)
谢谢你的时间
我正在构建一个应该是动态的Web表单.
当用户从列表中选择选项时,将根据其输入生成下一个表单输入.
例如:
<mat-form-field>
<mat-select placeholder="Type" [(ngModel)]="row.Type" (change)="TypeChosen(row.Type, row)">
<mat-option [value]="0">Treatment</mat-option>
<mat-option [value]="1">Travel</mat-option>
<mat-option [value]="2">Medication</mat-option>
<mat-option [value]="3">Equipment</mat-option>
</mat-select>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)
如果他选择类型'治疗',他会获得另一个选择输入,其中包含一些其他输入的选项,如果他选择不同的类型,他会获得不同的选项和其他输入.
我知道我需要动态生成HTML内容,也许是动态组件.
以简单的方式做到这一点的最佳方法是什么?
我正在使用Angular Material v6.0带有复选框的 MatTreeModule (mat-tree)。但是我很难弄清楚如何确定哪些节点已被检查,哪些节点尚未被检查。在 Angular Material 的示例中,他们提供了非常好的源代码来设置它,我能够很好地设置它。
但是,我无法确定哪些复选框已被选中,哪些未选中。我已经尝试了几个小时试图解决这个问题,但没有运气。
我的目标是最终用户将选中或取消选中树中的复选框,从那里开始,我需要在他们做出选择后运行一些过程。
但是我完全陷入了试图找出哪些 mat-tree-nodes 被检查和未检查的问题,而且我在任何地方都找不到好的工作示例。
关键源代码在这里
可以在此处找到有关 mat-tree 的更多信息
任何人都可以帮助确定复选框是否已被选中?
谢谢。
根据请求,我在此处从两个代码文件中添加代码:
app/tree-checklist-example.ts app/tree-checklist-example.html
来自“app/tree-checklist-example.ts”的打字稿源代码
import {SelectionModel} from '@angular/cdk/collections';
import {FlatTreeControl} from '@angular/cdk/tree';
import {Component, Injectable} from '@angular/core';
import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree';
import {BehaviorSubject} from 'rxjs';
/**
* Node for to-do item
*/
export class TodoItemNode {
children: TodoItemNode[];
item: string;
}
/** Flat to-do item node with expandable and level information */
export class TodoItemFlatNode …Run Code Online (Sandbox Code Playgroud) 我试图在下拉列表中使用ng-model属性,但是WebStorm一直在告诉它不被允许.当我运行应用程序时,它没有绑定所以我认为它与我的Angular版本有关.我正在运行最新版本,ng-model似乎适用于除select之外的所有其他元素.在上次更新中有什么变化吗?
<div class="form-group">
<label for="selectPost" class="control-label">Posts</label>
<select ng-model="post" class="form-control" id="selectPost" >
<option ng-repeat="post in currentUser.posts" value="{{post._id}}">
{{post.name}}
</option>
</select>
</div>
Run Code Online (Sandbox Code Playgroud) 我正在尝试以角度发出发布请求,但正如我发现的那样,如果我使用[formGroup],我就不能这样做,因为提交按钮不执行任何操作。我的代码看起来像这样
<form [formGroup]="formGroup" action="https://someUrl.com" method="post">
<input type="text" name="lang" id="lang" value="en" formControlName = "lang" >
<input type="submit" >
</form>
Run Code Online (Sandbox Code Playgroud)
如果我删除formGroup模块,它工作正常。是否存在错误、提交覆盖或其他问题?
考虑在 aService中查询 Web 服务的以下两种方法:
getAssessmentById(id: number): Observable<MotorAssessorReport> {
const url = environment.endPoints.assessment.base +
environment.endPoints.assessment.assessmentById + id;
return this.httpClient.get<MotorAssessorReport>(url)
}
async getAssessmentByIdAsync(id: number): Promise<MotorAssessorReport> {
const url = environment.endPoints.assessment.base +
environment.endPoints.assessment.assessmentById + id;
const data = await this.httpClient.get<MotorAssessorReport>(url).toPromise();
return data;
}
Run Code Online (Sandbox Code Playgroud)
第一个方法,getAssessmentById返回一个observable. 第二种方法,getAssessmentByIdAsync,返回一个promise。
subscribeToAssessment() {
this.assessmentService.getAssessmentById(this.assessmentId).subscribe(result =>
{
this.assessment = result;
});
}
async fetchAssessment() {
this.assessment = await this.assessmentService.getAssessmentByIdAsync(this.assessmentId);
}
Run Code Online (Sandbox Code Playgroud)
我一直使用第一种方法,返回一个Observable<T>,并订阅我的调用代码。
我最近才真正开始明白,只有当您期望返回多个结果时,才应该真正使用这种方法。换句话说,当使用 a 时Promise<T>,回调被调用的最大数量只有一次。
由于我一直期望我的服务器总是只返回一次,我的方法是错误的,我应该使用这种Promise<T> …
angular ×8
javascript ×2
observable ×2
rxjs ×2
angular-test ×1
angularjs ×1
css ×1
dom ×1
forms ×1
html ×1
npm ×1
post ×1
promise ×1
reactjs ×1
typescript ×1
webpack ×1
webstorm ×1