AngularJs SPA Template
2015-09-10 00:34
591 查看
AngularJs SPA Template
安装模板
AngularJs SPA Template For Visual Studio 是一个使用 AngularJs构建 SPA 项目的模板, 可以直接在 Visual Studio 联机模板中键入 AngularJs SPA Template 搜索到, 安装之后可以在已安装的模板中的 Visual C#-> Web 看到:创建App
在安装好模板之后, 创建名为: AngularJsSample 的项目, 项目结构如下:App_Start
此文件夹下有以下几个文件:BundleConfig.cs
熟悉Asp.net Mvc 项目的都知道这个文件是用来绑定资源文件的: .css, .js 等等。
public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new StyleBundle("~/content/css/app").Include("~/content/app.css")); bundles.Add(new ScriptBundle("~/js/jquery").Include("~/scripts/vendor/jquery-{version}.js")); //绑定 angular.js 相关的 js 文件: 路由, 过滤器, 服务, 指令, 控制器, 启动文件 bundles.Add(new ScriptBundle("~/js/app").Include( "~/scripts/vendor/angular-ui-router.js", "~/scripts/filters.js", "~/scripts/services.js", "~/scripts/directives.js", "~/scripts/controllers.js", "~/scripts/app.js")); }
RouteConfig.cs
路由配置:
public static void RegisterRoutes(RouteCollection routes) { //DefaultRoute 起到的作用后面在 DefaultRoute.cs 中会详细降讲到 routes.Add("Default", new DefaultRoute()); }
Startup.Auth.cs
用户验证的相关配置:
public void ConfigureAuth(IAppBuilder app) { //启用 cookie 来存储用户认证信息 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/login") }); //使用 cookie 来存储第三方登录的用户信息 app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); }
Content
一般此文件下都是一些静态资源文件: 样式表, 字体文件等Routing
DefaultRoute.cspublic class DefaultRoute : Route { public DefaultRoute() : base("{*path}", new DefaultRouteHandler()) { this.RouteExistingFiles = false; } }
DefaultRoute继承自
System.Web.Routing.Route对象, 在自身被实例化时实例的父类中使用的构造器签名为:
// 摘要: // 使用指定的 URL 模式和处理程序类初始化 System.Web.Routing.Route 类的新实例。 // // 参数: // url: // 路由的 URL 模式。 // // routeHandler: // 处理路由请求的对象。 public Route(string url, IRouteHandler routeHandler);
这里的处理路由请求的对象是
DefaultRouteHandler
DefaultRouteHandler.cs
这个是路由配置中的默认路由配置, 下面是其对路由的处理过程:
public IHttpHandler GetHttpHandler(RequestContext requestContext) { //获取当前处理的请求路由 var filePath = requestContext.HttpContext.Request.AppRelativeCurrentExecutionFilePath; //如果路由为 ~/, 则将请求路由改为 ~/views/index.cshtml, 一般为首页 if (filePath == "~/") { filePath = "~/views/index.cshtml"; } else { //如果请求路由不以 ~/views/ 开头(忽略大小写), 则向请求路由中插入 views/, 如 ~/index.cshtml --> ~/views/index.cshtml if (!filePath.StartsWith("~/views/", StringComparison.OrdinalIgnoreCase)) { filePath = filePath.Insert(2, "views/"); } //如果请求路由不以 .cshtml 结尾 (忽略大小写), 则向请求路由中的末尾加上 .cshtml if (!filePath.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase)) { filePath = filePath += ".cshtml"; } } //将规范后的请求路由使用 WebPageHttpHandler 创建一个路由处理者 var handler = WebPageHttpHandler.CreateFromVirtualPath(filePath); //如果为 null 表示请求路由无效 404 if (handler == null) { requestContext.RouteData.DataTokens.Add("templateUrl", "/views/404"); handler = WebPageHttpHandler.CreateFromVirtualPath("~/views/404.cshtml"); } else { //在路由信息中加入当前请求路由, 去掉末尾 .cshtml requestContext.RouteData.DataTokens.Add("templateUrl", filePath.Substring(1, filePath.Length - 8)); } return handler; }
在上述代码中已经加入了很详细的注释。
Scripts
存放的都是脚本文件。 在使用此模板创建 SPA 项目的时候, 这个文件夹中会自动生成一下几个较为重要的文件:filters.js
services.js
directives.js
controllers.js
app.js
有 angularjs 基本知识的应该都懂…若不清楚的建议去学习一下 angularjs 先
Views
这里面则是视图了总结
在这个模板中, 个人感觉 Routing 文件夹下的DefaultRouteHandler是非常重要的, 它完成了基本请求路由的规范处理, 使得 View 可供访问。 后续将会继续对此模板进行介绍~
相关文章推荐
- Restangular的使用
- angularjs div contentEditable 双向绑定无效 完美解决
- AngularJs 在ng-repeat中动态使用ng-model进行双向数据绑定(二)
- AngularJs 在ng-repeat中动态使用ng-model进行双向数据绑定
- [AngularJS + Webpack] Production Setup
- AngularJS学习笔记ng-repeat
- AngularJS filter
- Angular学习
- AngularJS的$resource
- Angularjs标签模板加载原理
- angular模板加载 ----ng-template
- angularJS 表单使用
- [AngularJS] Accessing The View-Model Inside The link() When Using controllerAs
- [AngularJS + Webpack] Requiring CSS & Preprocessors
- [AngularJS + Webpack] Requiring Templates
- [AngularJS + Webpack] ES6 with BabelJS
- AngularJS介绍
- angular js 数据双向绑定
- 【AngularJS学习笔记】AngularJS表单验证
- Angularjs实践之优化你的$watch