Angular做一个笔记文章管理应用
前言相信大家在逛技术论坛或者技术博客的时候,都会发现有些写的很好的文章我们想保存下来以便可以重复翻阅和查看,在一些相对大的站点,比如SegmentFault或者掘金都会提供类似收藏这样的功能来帮我们做这个保存的工作,我们以后可以回来重复查看,但是我们平时浏览的站点肯定不止一个,并且有时候一些个人的技术博客并没有这样的功能,我们就只能存浏览器书签这样做了,这样我们平时保存下来的一些文章就会比较分散,没有一个统一的地方来帮我们管理,如果有这样一个应用,我们只要输入某篇我们想保存的文章的URL地址就可以帮我们生成这篇文章的正文内容,并且可以支持标签的分类和搜索等功能就好了,就是基于这个需求和我平时个人的使用经验开发出了这个应用。大家可以进这个地址先体验一下,账号是test,密码123456。该应用采用Angular4开发,koa2提供数据接口,因为我是Angular的初学者,边看官方文档边把这个应用做了出来的,也遇到了一些问题,下面我大概说一下开发的过程和遇到的一些问题的解决方案。技术方案选型如下
一、项目的初始化Angular是一个正式发布于16年九月的一个前端框架(其实Angular的定位是一个平台了),它和vue、react不太一样的是,Angular不只是针对视图层的一个库,它提供的是一个完整的解决方案和生态,它本身内置了组件化方案、模块化方案、测试、表单验证、路由、国际化和HTTP服务等,这些东西我们开发者不用再去纠结怎么选择,直接按官方的建议说明走就好了,选择困难症患者肯定很喜欢这样的,但相对的它也就没有vue和react那么灵活了,这个怎么看待得根据我们每个人的项目需求来选择。既然Angular它本身是这么完整的了,它肯定也有CLI工具,那就是Angular CLI,Angular CLI是一个命令行界面工具,它可以创建项目、添加文件以及执行一大堆开发任务,比如测试、打包和发布。我们可以先执行以下命令全局安装Angular CLI
然后执行 二、模块化与组件化Angular 应用是模块化的,并且 Angular 有自己的模块系统,它被称为NgModules。我们的应用由一个或者多个模块组成,并且必须要有一个根模块,我们通常命名为AppModule,每个模块都会有一个叫 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app/app.module'; platformBrowserDynamic().bootstrapModule(AppModule); Angular应用还是组件化的,组件负责控制屏幕上的一小块区域,称之为视图,每个组件也有一个叫 @Component({ selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.scss'] }) 这样我们就可以组合不同的组件拼装起我们整个应用了。整体架构图如下 三、路由配置Angular的路由是通过一个叫RouterModule的模块来配置的,RouterModule在 import { Routes,RouterModule } from '@angular/router'; const routes: Routes = [ { path: 'index',component: IndexComponent },{ path: '**',redirectTo: 'index',pathMatch: 'full' } ]) @NgModule({ imports: [RouterModule.forRoot(routes)] ... }) 路由配置好后把它的返回值添加到AppModule的imports数组里面就好了。然后在我们的根组件appComponent的模板里面添加 四、目录结构划分目录的划分我是根据个人的开发习惯来做的,我们的业务逻辑的开发大多在app文件夹下进行,我一般会在app文件夹下新建一个pages文件来做页面级别组件的存放,然后会分别新建directive、pip、service、animation、interceptor文件夹来存放我们应用的指令、管道、服务、动画、拦截器,因为这个应用我没有用一些第三方的UI组件库,一些通用的组件都是自己封装的,所以还需要一个component文件夹来存放整个应用所需的一些通用UI组件,这样我们整个应用的划分就很清晰了。最后的目录说明大致如下 app ├── animations // 动画 │ └── global-router-animation.ts ├── app-routing.module.ts // 路由的配置文件 ├── app.component.html // 根组件的模板文件 ├── app.component.scss // 根组件的样式文件 ├── app.component.spec.ts // 根组件的测试文件 ├── app.component.ts // 根组件 ├── app.module.ts // 根模块 ├── component // 通用的UI组件 ├── button │ └── dropdown ├── directives // 指令 │ └── markdown-editor ├── interceptor // 拦截器 │ └── global-response-interceptor.ts ├── page // 页面级别的组件 │ ├── add-link-note │ ├── add-note │ ├── classification │ ├── edit-note │ ├── index │ ├── search │ ├── tag │ └── view-note └─ services // 服务 ├── loading-bar ├── msg ├── note └── tag 五、跨域问题跨域问题几乎是现代前端项目都会遇到的了,在vue,react等项目项目中我们可以通过webpack-dev-server的代理配置来解决,Angular CLI创建出来的项目底层也是通过webpack来进行应用的打包编译的,但是Angular CLI把webpack的配置给包装隐藏起来了,我们可以通过执行命令 { "/api":{ "target":"http://localhost:3002" } } 写完该配置文件后我们还需要在package.json的start命令里面加上这个配置 "start" : "ng serve --proxy-config proxy.config.json" 然后执行 六、未解决的问题前面有说过这个应用没有使用一些第三方的UI组件库,项目中用到的一些UI组件是我自己封装的,其中有一个LoadingBar组件和message消息提示组件,它的调用方式应该是通过服务的形式来调用的,类似如下代码 this.loadingBar.start() this.msg.info('这是消息提示') 但是在Angular里面服务本身是不带模板的,只有组件才有模板,所以这样的组件应该是要通过服务去动态的加载一个带模板的组件,但是我没有找到相关的实现方案,去看了一下ng-zorro的源码没看懂 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |