angular-seed 路由配置详解:ngRoute 如何实现 !/view1 页面切换(含 hashPrefix 原理)

发布时间:2026/9/19 11:34:10

angular-seed 路由配置详解:ngRoute 如何实现 !/view1 页面切换(含 hashPrefix 原理) angular-seed 路由配置详解ngRoute 如何实现 #!/view1 页面切换含 hashPrefix 原理【免费下载链接】angular-seedSeed project for angular apps.项目地址: https://gitcode.com/gh_mirrors/an/angular-seedangular-seed 是 AngularJS 的官方种子项目通过 ngRoute 路由模块即可实现#!/view1、#!/view2这样无需刷新页面的前端路由切换。本文带你完整理解这套路由配置从 app.js 中的hashPrefix配置讲起拆解#!/view1地址是如何一步步驱动 ng-view 切换页面内容的新手也能轻松看懂。 快速上手30 秒体验路由切换先跑起来感受效果git clone https://gitcode.com/gh_mirrors/an/angular-seed cd angular-seed npm install npm start打开localhost:8000/index.html你会看到顶部两个导航链接见 index.htmlul classmenu lia href#!/view1view1/a/li lia href#!/view2view2/a/li /ul点击切换时浏览器地址栏变成#!/view1或#!/view2页面中间的 ng-view 区域内容随之变化而整个页面并不会重新加载——这就是 ngRoute 前端路由的魔力。 第一步主模块如何挂载ngRoute入口文件 app/app.js 做了三件事声明依赖myApp模块依赖ngRoute并聚合myApp.view1、myApp.view2两个路由子模块设置 hashPrefix$locationProvider.hashPrefix(!)决定 URL 中#后面带不带感叹号配置兜底路由$routeProvider.otherwise({redirectTo: /view1})表示访问任何未匹配的路径时自动跳到 view1。其中声明依赖这一步很关键因为myApp依赖了ngRoute整个应用里的路由配置$routeProvider才能生效。️ 第二步每个视图模块自注册自己的路由angular-seed 采用模块自治的组织方式每个视图文件夹里都有自己的when()路由声明view1.jswhen(/view1, { templateUrl: view1/view1.html, controller: View1Ctrl })view2.jswhen(/view2, { templateUrl: view2/view2.html, controller: View2Ctrl })每个路由配置就两个核心项配置项作用本项目示例templateUrl指定要加载的 HTML 模板view1.htmlcontroller指定接管该视图的控制器View1Ctrl比如 view2.html 里还演示了自定义 interpolate 过滤器用来把version服务注入到v%VERSION%中——这说明路由切换后新的控制器、指令、过滤器都会在ng-view内正常生效。 核心原理hashPrefix 与 #!/view1 的诞生这是很多人困惑的地方为什么地址是#!/view1而不是#/view1答案就在 app.js 这一行$locationProvider.hashPrefix(!);hashPrefix用于设置#号后面的前缀字符常见取值取值生成 URL说明!#!/view1老式 IE / jQuery 会把#!识别为 hash 变化兼容性最好本项目采用#/view1更简洁但旧浏览器可能不触发事件空字符串 HTML5 模式/view1依赖服务器重写规则刷新需后端配合为什么用 hash 路由而不是/view1真实路径零后端配置#之后的内容不会发送给服务器静态服务器如本项目的http-server无需任何 rewrite 规则直接 npm start 就能跑刷新不 404在#!/view2页面按 F5服务器只请求index.html路由状态由前端从 URL 恢复支持直接分享把xxx/index.html#!/view2发给别人打开就定位到 view2。 完整链路点击链接后发生了什么以点击view2链接为例整条链路只有 5 步用户点击 index.html 中的a href#!/view2浏览器只修改 hash不发起整页刷新ngRoute 内部监听$location的变化检测到 hash 从#!/view1变为#!/view2$location把#之后的部分解析为路由路径/view2!前缀被自动剥离ngRoute匹配 view2.js 中注册的when(/view2, ...)规则ng-view 用view2.html模板替换原有内容并实例化View2Ctrl控制器。反向操作浏览器前进/后退按钮走同样的监听逻辑所以 hash 路由天然支持浏览器历史导航。 目录结构速查路由相关的文件布局完整说明见 README.md路径职责app/app.js主模块引入 ngRoute、设置 hashPrefix、兜底路由app/index.html导航链接 ng-view视图容器app/view1/view1.js注册/view1路由与View1Ctrlapp/view2/view2.js注册/view2路由与View2Ctrlapp/core/version/version.js版本号服务演示路由切换后服务仍可用 动手练习扩展你的第一个路由照着 angular-seed 的模式加一个view3只需三步新建app/view3/目录放 view3.html 模板与注册when(/view3, ...)的view3.js在 app.js 的依赖数组中追加myApp.view3在 index.html 菜单加一个a href#!/view3链接。想改默认落地页只需把otherwise({redirectTo: /view1})里的目标换掉即可。❓ 常见疑问#!/view1和#/view1能混用吗不能。hashPrefix一旦设为!ngRoute 只按!前缀解析直接输#/view1会被当作未匹配路径触发otherwise重定向。生产环境能去掉 hash 吗可以切换到 HTML5 模式$locationProvider.html5Mode(true)但需要服务器把所有前端路径重写回index.html而 hash 路由在任何静态服务器上都开箱即用这也是 seed 项目的默认选择。路由和测试的关系每个视图都配有单元测试如 view1.spec.js路由行为还可参考 e2e-tests/scenarios.js 中的端到端场景。掌握ngRoute hashPrefix这套机制你就理解了早期单页应用URL 即状态的核心思想——现代框架的路由Vue Router、React Router本质上仍是它的升级版。【免费下载链接】angular-seedSeed project for angular apps.项目地址: https://gitcode.com/gh_mirrors/an/angular-seed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/19 11:34:10

Cesium前端直解GeoTIFF:geotiff.js+proj4地理坐标映射实战

1. 为什么前端直接渲染TIFF影像成了Cesium项目里的“硬骨头”Cesium在地理空间可视化领域已经稳坐头把交椅,但凡做过三维GIS项目的人都知道,它对标准瓦片(如WMTS、TMS)和3D Tiles的支持堪称丝滑,可一旦遇到原始TIFF——…

2026/9/19 12:59:14

N_m3u8DL-RE:m3u8视频下载快速完整指南

N_m3u8DL-RE:m3u8视频下载快速完整指南 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 把只能在浏览…

2026/9/19 12:59:14

25MHz可综合MIPS五级流水线CPU工程实现

简介:本资源是一份面向数字电路与计算机体系结构初学者的MIPS流水线CPU Verilog实现详解文档,聚焦于理解并动手实现5级流水线架构中的关键问题。内容系统讲解数据冒险(含一阶/二阶相关)、数据转发机制、控制冒险及延迟分支策略等核…

2026/9/19 12:59:14

VS Code 配置 Markdown 编译器:从零搭建高效写作工作流

这么多年来,VS Code 一直是我写 Markdown 的主力编辑器。很多人一看到“配置 Markdown 编译器”这几个字就发怵,觉得是不是又要装一堆插件、改一堆配置。实际上,Markdown 不是说不需要“编译”,而是这里的编译过程和 C/C、Java 那…

2026/9/19 12:59:14

深度学习在物理层信号处理中的实践:从IQ数据到CNN调制识别

简介:面向5G通信与物理层算法研究人员,这份PDF是一篇系统性的深度学习应用研究文献,梳理了深度学习在物理层信号处理中的研究脉络。内容先介绍深度学习基本范式,覆盖DNN、CNN、RNN与LSTM网络结构,重点讲解LSTM门机制如…

2026/9/19 12:59:13

用命令行管理瓦洛兰特皮肤:Riot API与CLI工具的实战指南

玩《瓦洛兰特》这几年,我最大的执念大概就是皮肤了。每次有新皮肤上线,第一反应不是打开游戏客户端,而是先找个能快速看到高清预览和价格的地方。但说实话,游戏内商店的体验一直让我觉得不太痛快:想看今天的每日商店&a…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/19 0:03:10

验证 OpenSpec 兼容性,Cursor 的 Token 从 TaoToken 出

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

书桌角落的 Mac mini,OpenClaw 通过 TaoToken 跑任务。

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

oh-my-hermes:打造跨工具的命令编排与插件化工作流

1. 项目概述与设计初衷1.1 它到底是什么先说结论:oh-my-hermes 是一个面向开发者日常终端操作的效率工具套件,核心定位是“把分散在各类命令行工具里的高频操作,统一收拢成一套插件化、可编排的工作流”。项目灵感来源很明显——oh-my-zsh 重…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码