angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)

简介: angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)

前言

大家好,我是yma16,本文分享angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)

angular配置

Angular 配置的主要方式是通过 Angular CLI (命令行接口)。Angular CLI 是 Angular 项目的官方脚手架,其中包含了一些最佳实践和可扩展的功能。

以下是一些基本的 Angular CLI 命令:

  1. 创建一个新的 Angular 应用程序:
ng new my-app
  1. 进入应用程序目录:
cd my-app
  1. 启动开发服务器:
ng serve
  1. 构建应用程序:
ng build
  1. 运行单元测试:
ng test
  1. 运行端到端测试:
ng e2e
  1. 生成代码:
ng generate component <component-name>

以上是一些常用的 Angular CLI 命令。涉及更多的配置和选项,请参阅 Angular CLI 文档。

思考js和ts

js没有数据类型的规范使用比较粗暴,和人生苦短的python堪比卧龙凤雏.

ts在js的基础之上添加了类型的规范,增强cleanCode和问题排除.

ts还引入他的创始人c++的类、继承和接口的使用,多元化的buff让他在前端界平步青云.

angular对比vue的router

vue存在vue-router,beforeEach初始化是否加载路由

angular存在CanActivate,默认存在且加载路由,在跳转路由会预先判断是否满足

CanActivate接口

对路由跳=跳转时添加前置判断返回true;false

一下是个人结合后端判断角色登录时后是否具有权限的判断逻辑

//路由权限认证
import { CanActivate } from "@angular/router";
import { AxiosService } from '../axios/axios.service'
import { Injectable } from '@angular/core';
@Injectable({
  providedIn: 'root'
})
export class LoginGuard implements CanActivate{
  constructor(public $axios: AxiosService) { }
  async canActivate(){
    console.log('权限配置')
    let loggedIn :boolean= false;
    // 权限配置
    if(!loggedIn){
      console.log("用户未登录");
      let userInfo:object=JSON.parse(window.localStorage.getItem('edit-site-info')||'')
      const url:string='https://yongma16.xyz/api/user/login/'
      await this.$axios.AxiosPost(url,userInfo).then((data:any)=>{
        console.log("axios post 请求: ", data)
        if(data.data.code==1){
          loggedIn=!loggedIn
        }
      })
      // axios.post(url,userInfo).then((data:any)=>{
      //   console.log("axios post 请求: ", data)
      //   loggedIn=!loggedIn
      // })
    }
    return loggedIn;
  }
}

providers声明

providers

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { LoginComponent } from './login/login.component';
import { EditComponent } from './edit/edit.component';
import {LoginGuard} from './guard/login.guard';//权限
// import {UnsaveGuard} from './guard/unsave.guard';//权限
const routes: Routes = [
  { path: 'home', component: HomeComponent ,
    children:[
      { path: 'edit', component: EditComponent },
    ] ,
    canActivate: [LoginGuard]},
  {
    path: '**',
    component: LoginComponent
  }
];
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
  providers: [LoginGuard]
})
export class AppRoutingModule { }

使用axios

加载包

我这里imports ckEditor

加载了providers axios

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CKEditorModule } from '@ckeditor/ckeditor5-angular';//ckeditor
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { LoginComponent } from './login/login.component';
import { EditComponent } from './edit/edit.component';
import { AxiosService } from '../app/axios/axios.service'
@NgModule({
  declarations: [
    AppComponent,
    HomeComponent,
    LoginComponent,
    EditComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    CKEditorModule,
  ],
  providers: [AxiosService],
  bootstrap: [AppComponent]
})
export class AppModule { }

二次利用axios

我这里定义AxiosService类调用get和post

import { Injectable } from '@angular/core';
import axios from 'axios'
@Injectable({
  providedIn: 'root'
})
export class AxiosService {
  constructor() { }
  AxiosGet(api:any) {
    return new Promise((resolve, reject)=>{
      axios.get(api).then((res)=>{
        resolve(res)
      })
    })
  }
  AxiosPost(url:string,data:object) {
    return new Promise((resolve, reject)=>{
      axios.post(url,data).then((res)=>{
        resolve(res)
      }).catch(r=>{
        reject(r)
      })
    })
  }
}

路由跳转的前提和baseUrl的关系

跳转路由

this.router.navigate(['/home/edit/',''])

index.html中的base作为跳转的前置路由拼接

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>ckEditor测试</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root id="ng-app"></app-root>
</body>
</html>

部署后的跳转路由

url:href+navigate的路由path参数

nginx部署前端项目

注意点:路由拼接

location /edit-web{
  alias 前端打包文件
  try_files $uri $uri/ /edit-web/index.html;# 循环查找/edit-web统一路由下的前端进行拼接
    index index.html index.htm;
}

结束

本文分享到这结束,如有错误或者不足之处欢迎指出,感谢大家的阅读!

目录
相关文章
kde
|
28天前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
kde
602 4
|
2月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
280 1
|
27天前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
97 5
|
2月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
255 18
|
2月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
308 17
|
3月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
158 1
|
API 开发者 UED
PrimeFaces:JSF的魔法衣橱,解锁UI设计的无限可能!
【8月更文挑战第31天】本文介绍如何结合 JSF(JavaServer Faces)和 PrimeFaces 构建美观且功能强大的现代用户界面。PrimeFaces 提供丰富的 UI 组件库,包括按钮、输入框、数据网格等,支持现代 Web 标准,简化界面开发。文章通过具体示例展示如何使用 `&lt;p:inputText&gt;` 和 `&lt;p:calendar&gt;` 等组件创建用户表单,并用 `&lt;p:dataTable&gt;` 展示数据集合,提升 JSF 应用的易用性和开发效率。
279 0
|
开发者 安全 SQL
JSF安全卫士:打造铜墙铁壁,抵御Web攻击的钢铁防线!
【8月更文挑战第31天】在构建Web应用时,安全性至关重要。JavaServer Faces (JSF)作为流行的Java Web框架,需防范如XSS、CSRF及SQL注入等攻击。本文详细介绍了如何在JSF应用中实施安全措施,包括严格验证用户输入、使用安全编码实践、实施内容安全策略(CSP)及使用CSRF tokens等。通过示例代码和最佳实践,帮助开发者构建更安全的应用,保护用户数据和系统资源。
202 0
|
开发者 C# C++
揭秘:如何轻松驾驭Uno Platform,用C#和XAML打造跨平台神器——一步步打造你的高性能WebAssembly应用!
【8月更文挑战第31天】Uno Platform 是一个跨平台应用程序框架,支持使用 C# 和 XAML 创建多平台应用,包括 Web。通过编译为 WebAssembly,Uno Platform 可实现在 Web 上运行高性能、接近原生体验的应用。本文介绍如何构建高效的 WebAssembly 应用:首先确保安装最新版本的 Visual Studio 或 VS Code 并配置 Uno Platform 开发环境;接着创建新的 Uno Platform 项目;然后通过安装工具链并使用 Uno WebAssembly CLI 编译应用;最后添加示例代码并测试应用。
499 0