我有一个简单的模型:
export class Profile extends ServerData {
name: string;
email: string;
age: number;
}
Run Code Online (Sandbox Code Playgroud)
当我打电话到服务器(Angular 4,$ http)时,我通常会收到以下响应:
{
name: string;
email: string;
}
Run Code Online (Sandbox Code Playgroud)
该age属性丢失。
有什么方法可以使用我的模型并创建默认年龄,以防丢失?如果可能,我希望不必创建2个单独的模型。
我不想将年龄创建为可选属性-我需要它,即使它的默认值不正确也是如此。
更新:
这是我对服务器的呼叫:
results-manager.component.ts:
this.resultsManagerService.getResults(this.config.request.action, this.pagingAndSorting, this.args).subscribe(
results => {
this.results = this.results.concat(results as Profile[]);
Run Code Online (Sandbox Code Playgroud)
results-manager.service.ts:
getResults(action: string, pagingAndSorting: PagingAndSorting, args: string[]): Observable<Profile[]> {
return this.apiService.callServer(
pagingAndSorting,
action,
...args );
Run Code Online (Sandbox Code Playgroud)
}
该请求有效并且我收到了响应,但是即使我定义了默认值(如@msanford的答案所建议),当我在组件中收到响应时,它们也会被删除。同样,如果我向模型添加构造函数(根据董建华的回答)。
后端响应似乎完全覆盖了模型-不仅仅是分配值。
我如何才能仅将值分配给模型而不删除不返回的值?
我有一个字符串(HTML内容)和一个位置(索引)对象数组.字符串长度约为160万个字符,大约有700个位置对象.
即:
var content = "<html><body><div class="c1">this is some text</div>...."
var positions = [{start: 20, end: 25}, {start: 35, end: 37}....]
Run Code Online (Sandbox Code Playgroud)
我必须在字符串中的每个起始位置插入一个开口span标记,并在字符串中的每个结束位置插入一个close span标记.
最有效的方法是什么?
到目前为止,我已经尝试反向排序位置数组,然后循环,然后使用replace/splice插入标记,例如:
content = content.slice(0, endPosition) + "</span>" + content.substring(endPosition);
content = content.slice(0, startPosition) + "<span>" + content.slice(startPosition);
Run Code Online (Sandbox Code Playgroud)
(注意我是如何从最后开始循环的,以避免弄乱开始/结束位置).
但这需要大约3秒钟,这对我来说似乎缓慢且效率低下.
有什么更有效的方法呢?
编译我的 TypeScript 项目时,编译器抛出以下错误:
node_modules/@types/domutils/index.d.ts:6:10 - error TS2614: Module '"../../domhandler/lib"' has no exported member 'DomElement'. Did you mean to use 'import DomElement from "../../domhandler/lib"' instead?
Run Code Online (Sandbox Code Playgroud)
违规行是:
import { DomElement } from "domhandler";
Run Code Online (Sandbox Code Playgroud)
问题是,在它试图从中导入的类型文件中,DomElement 接口是一个非默认导出接口,如下所示:
export interface DomElement {
attribs?: {[s: string]: string};
children?: DomElement[];
data?: any;
name?: string;
next?: DomElement;
parent?: DomElement;
prev?: DomElement;
type?: string;
}
Run Code Online (Sandbox Code Playgroud)
如果我删除花括号,它实际上确实有效,但这对我来说似乎有问题:
node-modules由绝对类型提供的文件夹中的类型定义中。我不想更改依赖文件。Github 中没有相关的公开问题,所以我认为它确实有效。事实上,它适用于使用旧版本 Node (v8) 的同事,但这似乎没有什么不同。版本: