您的位置:首页 > Web前端 > AngularJS

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.cs

public 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 可供访问。 后续将会继续对此模板进行介绍~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: