[渣翻译] 在ASP.NET MVC WebAPI项目中使用 AngularJS
原文地址http://blog.technovert.com/2013/12/setting-up-angularjs-for-asp-net-mvc-n-webapi-project/
我们最近发布了一个VS2010/2012的项目模板,以支持AngularJS与ASP.Net MVC4。我篇文章描述了引擎下到底发生了什么。我们怎样才能将AngularJS与ASP.Net MVC4很好的揉合在一起。我们在这里打包的项目模板将你初次设置AngularJS的难度降到最低。
对于一个典型的ASP.Net MVC的WebAPI信息流可以通过下面的图来描述。
正如你在图中看到的服务器上的流程基本是相同,但发生变的是客户端,由于AnuglarJS是一个单页面应用(SPA)框架,它带来了一系列功能,帮助提供一个真正的SPA体验给用户。
在一个典型的MVC应用程序中你加载一个视图,执行一些操作,然后导航到另一个视图。这是通过标准的HTTP调用服务器加载HTML和相关内容,通常是通过一整个页面刷新完成的。
在AngularJS中事情有点不同,看起来像在页面没有刷新的情况下加载了内容。一些HTML标记区域里的内容在被浏览时发生变化。
需要注意的是AngularJS并不是一个被应用就能直接使用的Javascript库。它是一个成熟的SPA框架,因此需要一些配置才能将AngularJS和ASP.Net MVC很好的融合在一起。
配置
在我们开始配置前了解一下AngularJS的原理是很重要的。
AngularJS Routing
一旦AngularJS开始工作它将拦截所有的网址导航请求(<a>标记),并停止浏览器刷新整个页面。它是这么处理的:
- 它开始与用户访问APP的HOME(如http://localhost/home)。这是从一个服务器视图中获取数据的标准HTML请求。
- 浏览器然后加载必要的HTML和脚本,并设置了AngularJS配置。
AngularJS导航($location服务)发起请求加载局部视图到一个特定的页面部分(ng-view或ng-include)。
牢记这一点,我们开始设置视图。
Setting up Views
AngularJS有它自己的视图引擎(templating engine),因此我们可以使用标准的HTML文件或razor view返回的HTML内容。如果是标准的HTML文件我们将不能通过动态视图(CSHTML,vbhtml)来获得一些内容。
这篇文章详细描述了如何在razor view中配置。
Master Page (_layout.cshtml)
从一个典型的母版页开始与AnuglarJS集成
<html>
<head>
<!-- Style sheet declartion -->
</head>
<body ng-app="main" ng-controller="RootController">
<!-- Header \ Sidebar Content-->
<div class="container">
@RenderBody()
</div>
<!--Script declarations go here-->
</body>
</html>
注意body上ng-app的标签和RootController。 AngularJS bootstraps框架一旦它看到的ng-app被声明。
接下来的步骤则是设置容器(它填充了@ RenderBody()区域)。
Container HTML View (home/index.cshtml)
一个典型的容器视图可以很简单,比如这:
<div data-ng-view=""></div>
这里的ng-view的声明是一个AngularJS指令,它由包括当前路径的模板渲染到主布局(index.cshtml)文件补充$route
的(在内部依赖于$location服务)。
此div现在作为一个容器供其他partial views加载。每当路径(URL)变化在此div的内容都会更具服务端返回内容产生变化。
Other Partial Views
这些都是ASP.NET MVC中模板页之外的标准partial views。
@{
Layout = null;
} <h2>Users</h2>
<div>
<!--HTML template for rendering user list-->
</div>
由于这些partial views所提出的请求是不完整的页面请求所以只有HTML片段。
这是标准设置的视图。接下来的部分是路由
Routing Setup
在AngularJS路由的设置是使用$ routeProvider做在配置阶段。
下图显示了如何在AngularJS路由映射到局部视图
如果您的阅读过AngularJS routing,这将立即开始变得有意义。在浏览器的URL变化,该框
架要求已在$ routeProvider配置。
Browser Url : http://localhost/#/demo
Partial requested : http://localhost/home/demo
现在你可以明白是怎么AngularJS和MVC的路由可以在一起很好的工作。
最后一步是设置AnglarJS脚本文件。
AngularJS App Scripts
对于AngularJS的构建包括controllers,指令,过滤器和服务。一些约定可以帮助我们组织应用程序代码中AngularJS。
为每个指令,过滤器和服务创建一个文件
为每一个局部视图创建一个文件
创建一个用于配置常用AngularJS设置和引导应用程序中的app.js文件
最终的结构看起来像这样
[渣翻译] 在ASP.NET MVC WebAPI项目中使用 AngularJS的更多相关文章
- 如何在ASP.NET MVC和EF中使用AngularJS
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) AngularJS作为一个越来越流行的前端框架,在使用ASP.NET MVC和实体框架开发W ...
- Asp.net MVC WebApi项目的自动接口文档及测试功能打开方法
https://blog.csdn.net/foren_whb/article/details/78866133
- ASP.NET MVC Web项目中使用Log4Net记录日志,并按照日志类型分文件存储
1.创建MvcLog4Net项目 2.创建 空的MVC项目 3.项目创建完成的效果 4.选择项目,点击鼠标右键,在弹出菜单中选择“管理解决方案的 NuGet 程序包” 5. 在NuGet浏览界面: 点 ...
- ASP.NET MVC 在项目中使用面包屑导航
给框架添加一个面包屑导航 1.创建一个类 using System; using System.Collections.Generic; using System.Linq; using System ...
- .net异步性能测试(包括ASP.NET MVC WebAPI异步方法)
很久没有写博客了,今年做的产品公司这两天刚刚开了发布会,稍微清闲下来,想想我们做的产品还有没有性能优化空间,于是想到了.Net的异步可以优化性能,但到底能够提升多大的比例呢?恰好有一个朋友正在做各种语 ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...
- 案例:1 Ionic Framework+AngularJS+ASP.NET MVC WebApi Jsonp 移动开发
落叶的庭院扫的一干二净之后,还要轻轻把树摇一下,抖落几片叶子,这才是Wabi Sabi的境界. 介绍:Ionic是移动框架,angularjs这就不用说了,ASP.Net MVC WebApi提供数据 ...
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...
- ASP.NET MVC搭建项目后台UI框架—1、后台主框架
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
随机推荐
- ASP.NET导出bdf文件
1.导出助手类 using System;using System.IO;using System.Data;using System.Data.OleDb;using System.Web;usin ...
- Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例
利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...
- 对于这个函数const int func(const int& a) const声明中,三个const分别是什么意思?
第一个const 函数的返回值类型是const. 这个const修饰没什么意义,你可以想象一下: 既然是函数的 返回值,而且是值传递的形式,是否const有什么意义.如果指针(引用)传递,怎表示返回值 ...
- Android监听键盘显示和隐藏
问题概况:横板cocos2dx游戏,点击输入框弹出键盘时,界面要求跟随网上平易,不能挡住输入框.这种问题只出现在非全屏键盘到情况下. 方案1:mainActivity重写onconfiguration ...
- Oracle 数据库优化-分析现有的sql
在做数据库sql优化时,首先要对现有的数据库sql进行优化,主要包括以下几种: 1.数据库正在执行的SQL是? 2.已经执行过得SQL是? 3.最耗时的的前几条SQL是? 4.最耗IO的SQL是? 5 ...
- HDU 2602 Bone Collector --01背包
这种01背包的裸题,本来是不想写解题报告的.但是鉴于还没写过背包的解题报告.于是来一发. 这个真的是裸的01背包. 代码: #include <iostream> #include < ...
- Android系列之Fragment(二)----Fragment的生命周期和返回栈
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- c# 二进制或算法实现枚举的HasFlag函数
from:http://www.cnblogs.com/icyJ/archive/2013/02/20/HasFlag.html 在权限的管理中,常常会出现一个权限包含的现象.例如,有三种基本权限:职 ...
- CSS3弹性伸缩布局(二)——flex布局
上一篇博客<CSS3弹性伸缩布局(一)——box布局>介绍了旧版本的box布局,而这篇博客将主要介绍最新版本的flex布局的基础知识. 新版本简介 新版本的Flexbox模型是2012年9 ...
- javascript设置网页刷新或者重新加载后滚动条的位置不变
有个同事说再javascript中你可以做任何你想做的事情,当时觉得不以为然,今天遇到个问题,就是页面重新加载后总是回到页面的顶部,如果客户只想看到他想看到的部分是怎么变化的,这个体验就好了.原本想象 ...