对于Angular路由器:带参数的loadChildren感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍angular路由配置,并为您提供关于AndroidAuto:如何在MediaBrows
对于Angular 路由器:带参数的 loadChildren感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍angular路由配置,并为您提供关于Android Auto:如何在 MediaBrowserService 的 loadChildren() 上返回大量子项?、Angular 12.0.5 HMR 不工作,不重新加载模块,不重新加载页面实时重新加载,Angular 11.0.6 重新加载整个页面 调查 Angular 构建系统使用的版本配置 webpack使用 Angular 12.0.5 / next.6 时 - 没有帮助、Angular App-Routing LoadChildren 找不到模块、Angular Hybrid:LoadChildren 和升级组件出错的有用信息。
本文目录一览:- Angular 路由器:带参数的 loadChildren(angular路由配置)
- Android Auto:如何在 MediaBrowserService 的 loadChildren() 上返回大量子项?
- Angular 12.0.5 HMR 不工作,不重新加载模块,不重新加载页面实时重新加载,Angular 11.0.6 重新加载整个页面 调查 Angular 构建系统使用的版本配置 webpack使用 Angular 12.0.5 / next.6 时 - 没有帮助
- Angular App-Routing LoadChildren 找不到模块
- Angular Hybrid:LoadChildren 和升级组件出错
Angular 路由器:带参数的 loadChildren(angular路由配置)
如何解决Angular 路由器:带参数的 loadChildren
在我的角度路由器中,我想根据 url 中的参数延迟加载不同的模块。这是我设置的伪路由:
path: '':slug'',loadChildren: async () => {
const SLUG = "How do I get the :slug param from the URL"?;
switch (SLUG) {
case ''first'':
return (await import(''./pages/first-page/first-page.module'')).FirstPageModule;
break;
case ''second'':
return (await import(''./pages/second-page/second-page.module'')).SecondPageModule;
break;
default:
return (await import(''./pages/default-page/default-page.module'')).DefaultPageModule;
}
},
我尝试使用解析器和守卫——不幸的是它们在路由激活后触发,因此我无法事先访问参数。有什么想法吗?
解决方法
为 slug
创建单个模块,例如:
const routes: Routes = [ { path: ''slug'',loadChildren: () => import(''./slug/slug.module'').then(m => m.SlugModule) } ];
然后,在 SlugModule
中,为以下组件添加路由:
const routes: Routes = [ { path: ''first'',component: FirstComponent },{ path: ''second'',component: SecondComponent } ];
Android Auto:如何在 MediaBrowserService 的 loadChildren() 上返回大量子项?
如何解决Android Auto:如何在 MediaBrowserService 的 loadChildren() 上返回大量子项?
我目前正在尝试实施 MediabrowserService
以构建适用于 Android Auto 的媒体应用。 我按照官方 Android Auto 文档 (https://developer.android.com/training/cars/media#onLoadChildren) 来实现onLoadChildren
功能。
以下是我尝试在 Android Auto 屏幕上显示内容的代码片段:
override fun onLoadChildren(parentId: String,result: Result<MutableList<MediabrowserCompat.MediaItem>>) {
...
if (parentId == NODE_LIBRARY_ALBUMS) {
val items = mutablelistof<MediabrowserCompat.MediaItem>()
val albumList = LibraryManager.getAlbumList()
for (it in albumList) {
val descriptionBuilder = MediaDescriptionCompat.Builder()
.setTitle(it.albumName)
items.add(MediabrowserCompat.MediaItem(descriptionBuilder.build(),MediabrowserCompat.MediaItem.FLAG_broWSABLE))
}
result.sendResult(items)
}
...
}
当项目数量足够小时,这很有效。 但是当item数量很大时(比如5000左右),会出现如下错误:
E/JavaBinder: !!! Failed BINDER TRANSACTION !!! (parcel size = 1339384)
我发现支持 Android Auto 的其他几个媒体应用程序(例如三星音乐)可以显示大量项目。 有没有什么办法可以在onLoadChildren
函数上返回大量的项目,或者有没有其他办法可以解决这个问题?
谢谢!
解决方法
可能您必须将大数据拆分为小块。例如,您有一个包含 5000 个项目的列表。所以在你的内心,MediaBrowserService
中的 onLoadChildren
做这样的事情
public fun onLoadChildren(parentId: String,result: Result<List<MediaBrowserCompat.MediaItem>>) {
if (MEDIA_ID_ROOT == parentId || itemsList.size > 100) {
fillMediaBrowsableResult(parentId,result);
}
else {
fillMediaPlayableResult(parentId,result);
}
}
//Split the large number of content to a parts
private fun fillMediaBrowsableResult(parentId: String,result: Result<List<MediaBrowserCompat.MediaItem>>) {
// Detect count of parts
val partsCount = itemsList.size / 100
if(itemsList.size % 100 > 0){
partsCount ++
}
val mediaItems = mutableListOf<MediaBrowserCompat.MediaItem>()
//Create parts in a loop
for(i in 0 until partsCount){
val mediaDescription = MediaDescriptionCompat.Builder()
.setMediaId(i) // This is your next parent in onLoadChildren when you click on it in AA
.setTitle("Part ${i + 1}")
.build();
val mediaItem =. MediaBrowserCompat.MediaItem(mediaDescription,MediaBrowserCompat.MediaItem.FLAG_BROWSABLE)
mediaItems.add(mediaItem)
}
result.sendResult(mediaItems)
}
private fun fillMediaPlayableResult(parentId: String,result: Result<List<MediaBrowserCompat.MediaItem>>){
val intParent = parentId.toInt()
val startPosition = intParent * 100 // where to start for this part
val stopPosition = (intParent + 1) * 100 // where to finish for this part
if(stopPosition > itemsList.size){
stopPosition = itemsList.size
}
val mediaItems = mutableListOf<MediaBrowserCompat.MediaItem>()
for(i in startPosition..stopPosition){
//Generate playable content for this part
val item = itemsList[i]
val mediaDescription = MediaDescriptionCompat.Builder()
.setMediaId(item.id)
.setTitle(item.albumTitle)
.build();
val mediaItem =. MediaBrowserCompat.MediaItem(mediaDescription,MediaBrowserCompat.MediaItem.FLAG_PLAYABLE)
mediaItems.add(mediaItem)
}
result.sendResult(mediaItems)
}
我没有检查这段代码,但我认为这个想法很清楚。
,如果您查看 Android SDK document:
注意:Android Auto 和 Android Automotive OS 对如何 他们可以在菜单的每个级别中显示许多媒体项。这些 限制最大程度地减少对驾驶员的干扰并帮助他们操作您的 带有语音命令的应用程序。 ...
所以,我认为最好的方法是限制用户体验设计中媒体项目的数量。对于您在处理大量媒体项目的其他应用中看到的情况,他们可能将 Jetpack Media 2 用于 pagination。
Angular 12.0.5 HMR 不工作,不重新加载模块,不重新加载页面实时重新加载,Angular 11.0.6 重新加载整个页面 调查 Angular 构建系统使用的版本配置 webpack使用 Angular 12.0.5 / next.6 时 - 没有帮助
如何解决Angular 12.0.5 HMR 不工作,不重新加载模块,不重新加载页面实时重新加载,Angular 11.0.6 重新加载整个页面 调查 Angular 构建系统使用的版本配置 webpack使用 Angular 12.0.5 / next.6 时 - 没有帮助
Angular HMR 不替换/重新加载组件
- 实时重载适用于 11.0.6 和 12.1.0-next.6。
- Angular 12.0.5 根本不会重新加载。
任何人都可以使用它并且可以提供一个有效的示例应用程序?
给定:一个简单的入门应用
(来自故事书 https://github.com/chromaui/intro-storybook-angular-template)
使用 Angular 11.0.6
然后 HMR 开箱即用并不能按预期工作,但完全重新加载可以(即启用 [WDS] 实时重新加载。)
更新到 Angular 12.0.5 时
然后 HMR 不会重新加载任何东西。 (根本没有实时重新加载)
12.0.5 行为:更新角度组件时不重新加载。
控制台错误(chrome):
dev-server.js:60 Uncaught Error: [HMR] Hot Module Replacement is disabled.
at Object.5033 (dev-server.js:60)
at __webpack_require__ (bootstrap:19)
at __webpack_exec__ (polyfills.js:12907)
at polyfills.js:12908
at webpackJsonpCallback (jsonp chunk loading:35)
at polyfills.js:1
编辑组件 (HTML) 后,控制台“卡住”“[WDS] 应用热更新...”
更新到 Angular 12.1.0-next.6 时"
结果与 v11 相同(然后 HMR 开箱即用,但完全重新加载可以(即启用 [WDS] 实时重新加载。)
webpack-dev-server 是原因(可能与 webpack 5.3 一起)
经过一番挖掘,我意识到这与 webpack-dev-server 有关。
- https://github.com/webpack/webpack-dev-server/issues/2758
一个解决方案似乎是将 webpack 目标设置为 web(而不是浏览器)进行开发。或者使用测试版的 webpack-dev-server(即 4.0.0-beta.x)
"target: ''web'',
调查 Angular 构建系统使用的版本
在“node_modules/@angular-devkit/build-webpack/package.json”中使用了 webpack-dev-server。
对于 "@angular-devkit/build-angular": "~12.0.5",webpack-dev-server 版本为 3.11.2
"peerDependencies": { "webpack": "^5.30.0","webpack-dev-server": "^3.11.2" },
将 Angular 更新为 v-next 时 对于 "@angular-devkit/build-angular": "^12.1.0-next.6",webpack-dev-server 版本较低,为 3.1.4,与 ''build-angular'' v11 相同。 (可能是因为他们意识到实时重新加载的问题)
"peerDependencies": { "webpack": "^5.30.0","webpack-dev-server": "^3.1.4" },
使用 Angular 11 时 对于“@angular-devkit/build-angular”:“~0.1100.6”
"peerDependencies": { "webpack": "^4.6.0",
配置 webpack(使用 Angular 12.0.5 / next.6 时) - 没有帮助
根据以下资源配置,使用@angular-builders/custom-webpack
没有帮助。帮助! =D
- https://github.com/just-jeb/angular-builders/tree/master/packages/custom-webpack#Custom-webpack-dev-server
- https://github.com/just-jeb/angular-builders/blob/master/packages/custom-webpack/examples/full-cycle-app/extra-webpack.config.ts
//package.json
"devDependencies": {
"@angular-builders/custom-webpack": "^12.1.0",
//angular.json
//replace "builder" in "build" and "serve"
//add customWebpackConfig with path to a new config file
//"builder": "@angular-devkit/build-angular:browser"
"architect": {
"build": {
"builder": "@angular-builders/custom-webpack:browser","options": {
"customWebpackConfig": {
"path": "extra-webpack.config.ts","replaceDuplicatePlugins": true
},//...
//replace "builder": "@angular-devkit/build-angular:dev-server","serve": {
"builder": "@angular-builders/custom-webpack:dev-server",
//extra-webpack.config.ts
import { Configuration } from "webpack";
export default {
target:"web",// target: process.env.NODE_ENV === "development" ? "web" : "browserslist",} as Configuration;
解决方法
我们有一些与您介绍的类似的东西。您是否删除了 package_lock、node_modules 并进行了全新安装?
在 Angular 11.2.4 和新的 Angular 12.1.4 项目中,使用 HRM 进行设置没有问题。 尝试使用 "@angular-builders/custom-webpack": "12.1.0","@angular-devkit/build-angular": "^12.1.4" 它应该可以工作
Angular App-Routing LoadChildren 找不到模块
如何解决Angular App-Routing LoadChildren 找不到模块
我是 Angular 的新手,正在学习视频教程。我被困在 App-Rounting 上,它试图加载子组件。这是到目前为止的代码
app-routing.module.ts
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { RouterModule,Routes } from "@angular/router";
import { HomeComponent } from "./home/home.component";
const appRoutes: Routes = [
{ path: "",component: HomeComponent },{
path: "customers",loadChildren: "../app/customers/customers.module#CustomersModule"
}
];
@NgModule({
imports: [CommonModule,RouterModule.forRoot(appRoutes)],// add the routes to import array
exports: [RouterModule],// after import,export the RouterModule after adding appRoutes
declarations: []
})
export class AppRoutingModule {}
我尝试将 loadChildren: "../app/customers/customers.module#CustomersModule" 更改为 loadChildren: "app/customers/customers.module#CustomersModule"
文件树结构如下
src\\
app\\
app-routing.module.ts
customers\\
customers.module.ts
customers.module.spec.ts
我不知道为什么它找不到并加载customers.module.ts。起初,我没有 customer.moudle.spec.ts 并添加了它,但它仍然在 chrome 控制台上抛出相同的错误。
节点版本为 v14.16.0 节点版本为 6.14.11
感谢这位新手的任何帮助。
谢谢
解决方法
我认为您的教程很旧,您必须使用 new syntax
const routes: Routes = [
{
path: ''items'',loadChildren: () => import(''./items/items.module'').then(m => m.ItemsModule)
}
];
Angular Hybrid:LoadChildren 和升级组件出错
如何解决Angular Hybrid:LoadChildren 和升级组件出错
我正在尝试使用延迟加载的 Angular 模块创建一个混合应用程序(Angular + AngularJS)。
当我尝试使用包含升级的 AngularJS 组件的组件延迟加载模块时,出现以下错误:
路线
const appRoutes: Routes = [
{
path: ''toto'',loadChildren: () => import(''./toto/toto.module'').then(module => module.TotoModule)
}
];
错误
Error: Uncaught (in promise): Error: Trying to get the AngularJS injector before it being set.
Error: Trying to get the AngularJS injector before it being set.
at injectorFactory (upgrade-static.umd.js:1266)
at _callFactory (ng_module.ts:201)
at _createProviderInstance (ng_module.ts:154)
at resolveNgModuleDep (ng_module.ts:110)
at NgModuleRef_.get (refs.ts:423)
at Object.resolveDep (provider.ts:424)
at Injector_.get (refs.ts:372)
at new UpgradeHelper (upgrade-static.umd.js:1491)
at new UpgradeComponent (upgrade-static.umd.js:1802)
at new MyExampleDirective (VM270 toto.module.ts:13)
at resolvePromise (zone.js:1255)
at resolvePromise (zone.js:1209)
at eval (zone.js:1321)
at ZoneDelegate.invokeTask (zone.js:434)
at Object.onInvokeTask (ng_zone.ts:390)
at ZoneDelegate.invokeTask (zone.js:433)
at Zone.runTask (zone.js:205)
at drainMicroTaskQueue (zone.js:620)
at ZoneTask.invokeTask [as invoke] (zone.js:520)
at invokeTask (zone.js:1656)
当我在 AppModule 中导入模块并执行以下路由时,它工作正常:
const appRoutes: Routes = [
{
path: ''toto'',children: TotoRoutes
}
];
我创建了 2 个 stackblitz :
-
使用延迟加载,触发错误: https://stackblitz.com/edit/angular-uye3ld
-
没有延迟加载的: https://stackblitz.com/edit/angular-3aogfs
今天关于Angular 路由器:带参数的 loadChildren和angular路由配置的介绍到此结束,谢谢您的阅读,有关Android Auto:如何在 MediaBrowserService 的 loadChildren() 上返回大量子项?、Angular 12.0.5 HMR 不工作,不重新加载模块,不重新加载页面实时重新加载,Angular 11.0.6 重新加载整个页面 调查 Angular 构建系统使用的版本配置 webpack使用 Angular 12.0.5 / next.6 时 - 没有帮助、Angular App-Routing LoadChildren 找不到模块、Angular Hybrid:LoadChildren 和升级组件出错等更多相关知识的信息可以在本站进行查询。
本文标签: