我刚刚完成了使用angular 4创建的应用程序的前端部分。我现在正在创建一个管理面板,该面板将具有单独的登录页面和两个或三个组件。起初我创建了一个新模块并使用路由器创建了一些“/ admin”路由。问题是app组件有标头,我不需要。使用* ngIf来检查当前的URL似乎太多了。管理页面的简单创建第二个角度应用程序会更好吗?什么是最好的方法?
答案 0 :(得分:4)
问题相当广泛,但我会尝试用多个应用来涵盖这个案例。
拥有多个应用的优势:
缺点:
对于angular-cli,您可以使用以下方法。在.angular-cli.json中创建两个应用程序(请参阅json schema)。你应该有像
这样的东西{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"project": {
"name": "..."
},
"apps": [
{
"name": "default",
"root": "src",
"outDir": "ci/dist-default",
"assets": [...],
"index": "index.html",
"main": "main-default.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [...],
"scripts": [],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
},
{
"name": "admin",
"root": "src",
"outDir": "ci/dist-admin",
"assets": [...],
"index": "index.html",
"main": "main-admin.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [...],
"scripts": [],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
...
}
为管理面板创建app-admin.module.ts
和app-admin.component.ts
,主要是复制粘贴原始模块。然后,您需要创建另一个main-admin.ts
文件,该文件将导入app-admin.module.ts
。
理想情况下,为app1和app2设置两个单独的文件夹会很好。
就是这样!现在,您有两个可以在一个项目中使用相同代码库的应用程序。
然后是时候调整你的package.json
脚本了:
"scripts": {
"ng": "ng",
"start-admin": "ng serve --proxy-config=proxy.conf.json --app=admin --base-href=/admin/ --port=4201",
"start-default": "ng serve --proxy-config=proxy.conf.json --app=default",
"start": "concurrently --kill-others 'npm run start-default' 'npm run start-admin'",
"build-admin": "ng build --app=admin --base-href=/admin/",
"build-default": "ng build --app=default",
"build": "concurrently 'npm run build-default' 'npm run build-admin'",
"build-prod": "concurrently 'npm run build-default -- -prod' 'npm run build-admin -- -prod'"
},
一些解释:
/admin
路径下找到管理项目,请参阅base tag。这是必需的,因为在构建之后,您将拥有两个不同的应用程序,并且它们不能同时由相同的路径提供服务/admin/
部分请参阅proxy.conf.json:
{
"/admin": {
"target": "http://localhost:4201",
"secure": false,
"changeOrigin": true,
"pathRewrite": {
"^/admin": ""
}
},
"...": "..."
}
最后你有类似的东西
这需要一些技巧和对代理的理解。此外,您还需要使用/ admin路径的相同代理设置来配置实时服务器。然而,它确实值得,我使用它已经有一段时间了,不能称之为一个糟糕的解决方案
答案 1 :(得分:1)
将application-nav-header
移到单独的组件中。
<alert-component></alert-component> <!-- Place there what is shared between `public` and `admin` -->
<router-outlet></router-outlet>
<public-nav-header-component></public-nav-header-component> <!-- NavHeader that customers can see -->
<router-outlet></router-outlet>
<admin-nav-header-component></admin-nav-header-component> <!-- AdminNavHeader -->
<router-outlet></router-outlet>
[
{path: "/", component: PublicComponent},
{path: "/admin", component: AdminComponent}
]
[
{path: "/login", component: LoginComponent},
{path: "/user-listing", component: UserListingComponent}
]
application.routes
此处