我目前正在评估替换Angular的优点的利弊。RxJS” Observable与普通的Promise,这样我可以使用async和await并获得更直观的代码风格。
我们的典型场景之一:在中加载一些数据ngOnInit。使用Observables,我们可以:
ngOnInit () {
this.service.getData().subscribe(data => {
this.data = this.modifyMyData(data);
});
}
Run Code Online (Sandbox Code Playgroud)
当我改为返回Promisefrom getData(),并使用async和时await,它变为:
async ngOnInit () {
const data = await this.service.getData();
this.data = this.modifyMyData(data);
}
Run Code Online (Sandbox Code Playgroud)
现在,很明显,Angular不会“知道”,而ngOnInit变成了async。我觉得这不是问题:我的应用仍然可以像以前一样工作。但是,当我查看OnInit接口时,显然并未以暗示可以声明该函数的方式声明该函数async:
ngOnInit(): void;
Run Code Online (Sandbox Code Playgroud)
所以-底线:我在这里做什么合理吗?还是会遇到任何无法预料的问题?
我正在写一个angular2通用应用程序.它有一个d3图表,但我希望只在客户端(浏览器)呈现d3图表而不是尝试在服务器上呈现它.angular2 universal中是否有一个接口只能在客户端运行组件方法?
即
class ComponentWithChart implements OnInit, ngUniversalBrowser {
elem;
constructor( private viewContainerRef:ViewContainerRef) {}
ngUniversalBrowserOnInit() {
this.elem = this.viewContainerRef.element.nativeElement;
d3.select(this.elem).append('div').style({
'background-color':'yellow'
});
}
}
Run Code Online (Sandbox Code Playgroud)
是否有类似上面的示例可能只允许我ngUniversalBrowser在浏览器中运行该方法OnInit?
我是 Angular 的新手。我刚刚完成了我的 Angular Web 应用程序的开发。当我在生产过程中使用 ng serve 为我的应用程序提供服务时,一切正常。我添加了角度通用。现在,当我运行 npm run dev:ssr 或 npm run build:ssr && npm run serve:ssr 时,我的应用程序将拒绝打开,并在控制台中抛出 NetworkError 响应。我注意到这个错误发生在通过类'constructors(){..}'发送的http请求的次数。我浏览了几个解决方案,但无法了解我做错了什么。我的后端是用 nodejs 和 express 开发的。我会很感激我能得到的任何帮助。这是我总是在控制台中得到的错误响应的完整示例。
ERROR NetworkError
at XMLHttpRequest.send (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:200768:19)
at Observable._subscribe (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:19025:17)
at Observable._trySubscribe (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:186304:25)
at Observable.subscribe (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:186290:22)
at scheduleTask (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:105897:32)
at Observable._subscribe (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:105959:13)
at Observable._trySubscribe (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:186304:25)
at Observable.subscribe (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:186290:22)
at subscribeToResult (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:196385:23)
at MergeMapSubscriber._innerSub (C:\Users\MRBEN\Desktop\Angular\fxcore\dist\fxcore\server\main.js:191575:116)```
Run Code Online (Sandbox Code Playgroud) 我正在尝试在角度通用中使用isBrowser函数,但是当我构建时我仍然遇到相同的错误.我确实安装了angular-universal的npm包
npm i angular2-universal --save
'ng build -prod -aot'
ERROR in Illegal state: symbol without members expected, but got {"filePath":"C:/dir/universal/website/node_modules/@angular/platform-browser/platform-browser.d.ts","name":"__platform_browser_private__","members":["BROWSER_SANITIZATION_PROVIDERS"]}.
ERROR in ./src/main.ts
Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory' in 'C:/dir/universal/website\src'
@ ./src/main.ts 4:0-74
@ multi ./src/main.ts
Run Code Online (Sandbox Code Playgroud)
这是我的app.module.ts:
//modules
import { HomeModule } from './home/home.module';
import { IntakeFormulierModule } from './intake-formulier/intake-formulier.module';
import { BrowserModule } from '@angular/platform-browser';
import { UniversalModule } from 'angular2-universal/browser';
import { NgModule } from '@angular/core';
//routing
import { routing } from "./app.routing";
//pages
import { …Run Code Online (Sandbox Code Playgroud) 我正在开发将 SSR 与 Angular Universal 集成的 Angular 应用程序。在这个项目中,我们使用一些步进器的插件(bs-stepper)。问题是这个插件有一个多窗口引用,如下所示:
var matches = window.Element.prototype.matches;
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来验证它是否是浏览器,尝试了“检测”和“导航器”等多个选项。
angular ×4
javascript ×3
angular9 ×1
asynchronous ×1
d3.js ×1
node.js ×1
observable ×1
promise ×1
typescript ×1