在传统的web 应用程序中,浏览器端通过向服务器端发送请求,然后服务器端根据这个请求发送HTML到浏览器,这个响应将会影响整个的页面,比如说:用户通过一个连接导航到一个页面,会发送一个请求到服务器端,接下来服务器将会发送一个新的页面给浏览器。
但是在单页面应用程序中,整个页面只是在浏览器一开始请求的时候才会加载,接下来的请求,下来的交互请求都是通过ajax 来完成的,这就意味着只有部分的页面会更新,并不需要去加载整个的页面,这就减少了对用户操作的响应时间,从而使用户有一个更流畅的体验。但是在传统的web 应用程序中,并不存在这样的架构,但是新兴的技术比如web api ,angular.js 等很容易的去设计和实现单页面的web 应用程序。如图便是单页面程序的原理:

本文将演示如何通过web api 和angular.js 来创建web 应用程序的。

首先打开vs 2013 然后新建一个asp.net 应用程序,注意勾选web api 选项,如图:

在models 文件夹新建一个user类:

1     public class User
2     {
3         public int UserID { get; set; }
4         public string Name { get; set; }
5     }

然后创建一个web api :UserController,本文就演示如何加载和添加数据,相信如果看懂本文的话更新和删除都会做的。

 1     public class UserController : ApiController
 2     {
 3         private static List<User> userList = new List<User>() {
 4                                       new User(){ UserID=1, Name="zhangsan"},
 5                                       new User(){UserID=2, Name="lisi"},
 6                                       new  User (){UserID=3, Name="wangwu"},
 7                                       new User(){ UserID=4,Name="zhaoliu"}
 8         };
 9
10
11         public IEnumerable<User> Get()
12         {
13             return userList;
14         }
15         public void Post(User user)
16         {
17             userList.Add(user);
18         }
19
20     }

接下来我们就需要用anjular.js来创建接口了,首先需要安装angular.js 。angular.js 是一个开源的基于mvc的javascript框架,可以更好的开发和测试web应用程序。我们可以用vs 的包管理工具来安装angualr.js。视图>其他窗口>程序包管理器控制台 输入一下代码 安装angular.js:

成功之后,Scripts 文件夹会有anjular.js 的相关文件。我们知道anjular.js 基于mvc 的 首先我们新建一个controller 在scripts 文件夹命名为appcontroller.js

 1 var appmodule = angular.module('app', []);//angular是模块化的,所以首先我们需要实例化一个模块
 2
 3 //创建一个controller
 4 appmodule.controller('appcontroller', function ($scope, $http) {
 5
 6     $scope.UserID = '';
 7     $scope.Name = '';
 8     $scope.Users = [];
 9     $scope.Load = function () {
10
11         $http.get("/api/user").success(function (data, status) {
12
13             $scope.Users = data;
14         })
15
16     };
17
18     $scope.AddUser = function () {
19
20         $http.post("/api/user", { userid: $scope.UserID, name: $scope.Name }).success(function (data, status) {
21             $scope.Load();
22         })
23     };
24
25     $scope.Load();
26
27 });

然后视图的代码:

 1 @{
 2     ViewBag.Title = "Home Page";
 3 }
 4
 5 <div ng-app="app">
 6
 7     <div ng-controller="appcontroller">
 8         <table>
 9             <caption>Add User</caption>
10             <tr><td>user ID</td><td>Name</td></tr>
11             <tr>
12                 <td><input type="text" ng-model="UserID"  placeholder="input the user id" /></td>
13                 <td><input type="text" ng-model="Name" placeholder="input the user name" /> </td>
14             </tr>
15             <tr>
16                 <td>
17                     <button ng-click="AddUser()">Add User</button>
18                 </td>
19             </tr>
20         </table>
21
22         <table class="table table-bordered table-hover">
23             <caption>User List</caption>
24             <thead>
25                 <tr>
26                     <th>User ID </th>
27                     <th>Name</th>
28                 </tr>
29             </thead>
30             <tbody>
31
32                 <tr ng-repeat="user in Users">
33                     <td>
34                         {{user.UserID}}
35                     </td>
36                     <td>
37                         {{user.Name}}
38                     </td>
39                 </tr>
40             </tbody>
41         </table>
42     </div>
43 </div>
44 @section scripts{
45     <script src="~/Scripts/angular.js"></script>
46     <script src="~/Scripts/appcontroller.js"></script>
47 }

其中代码中 :

ng-app:表示的是告诉angular.js 哪个dom 的根元素用的这个模块。

ng-controller:是告诉angular.js 哪个dom元素是用过这个controller。

ng-click:表示用户点击的时候会调用哪个函数。

{{}}:这个是数据绑定的语法。

效果如图:

总结:

我也是初步的学习anjular.js。感觉和knockout.js 有点类似。其实学习这些不难,只要掌握它的原理,熟悉它的语法。我相信能很快的上手。anjular.js 是支持双向绑定的,它的好多功能还没有详细的了解,以后还会分享。总之我们掌握了这些就不需要去做有一些dom的操作和写一些冗余的代码了。

转载于:https://www.cnblogs.com/ListenCode/p/4217147.html

通过Web Api 和 Angular.js 构建单页面的web 程序相关推荐

  1. 【Web API系列教程】1.3 — 实战:用ASP.NET Web API和Angular.js创建单页面应用程序(上)

    前言 在传统的web应用程序中,客户端(浏览器)通过请求页面来启动与服务器的通信.然后服务器处理该请求,并发送HTML页面到客户端.在随后页面上的操作中--例如,用户导航到一个链接或提交一个包含数据的 ...

  2. 使用 Vuex + Vue.js 构建单页应用 1

    鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...

  3. 使用Vanilla.js构建单页应用程序(SPA)网站

    目录 项目 带有模块的组织代码 以可观察的方式应对变化 支持声明式数据绑定 将幻灯片(Slides)托管和加载为"页面" 使用路由器处理导航 带有CSS3动画的转换时间线 管理&q ...

  4. 使用 Vuex + Vue.js 构建单页应用

    原文地址:https://coligo.io/learn-vuex-by-building-notes-app/ 前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 ...

  5. 如何使用Vuex+Vue.js构建单页应用

    原文地址:https://coligo.io/learn-vuex-by-building-notes-app/ 前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 ...

  6. 面向初学者的带MVC API的Angular Js Table CRUD MSSQL

    目录 介绍 Angular Js代码要点 示例截图 第一部分 第二部分(ASP.NET MVC WEB API和数据表) 第三部分(关于Postman发布和测试API) 注意 结论 介绍 本文主要介绍 ...

  7. 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

    在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...

  8. Vue全家桶 + webpack 构建单页应用初体验

    文章指南 主题   承接这上一篇Vue + Webpack 构建模块化开发框架详解,我们知道了如何使用webpack对vue进行打包,从而开始我们的前端模块化开发之路,这一篇在上一篇的基础上讲解 Vu ...

  9. 【Web API系列教程】1.1 — ASP.NET Web API入门

    前言 HTTP不仅仅服务于web页面,同时也是构建暴露服务和数据的API的强大平台.HTTP有着简单.灵活和无处不在的特点.你能想到的几乎所有平台都包含有一个HTTP库,所以HTTP服务可以遍及广泛的 ...

最新文章

  1. 【刷算法】整数中1出现的次数(从1到n整数中1出现的次数)
  2. 程序员涨薪必备技能(1-5年必看!!!)
  3. PAT甲级1154 Vertex Coloring :[C++题解]图论、模拟、结构体存边
  4. 吴恩达《神经网络与深度学习》精炼笔记(4)-- 浅层神经网络
  5. VS2012 快捷键 VS RESHARPER 设置
  6. 最全总结,GitHub Action自动化部署
  7. 相机翻转设计的华硕旗舰ZenFone 6固件更新:新增“超级夜间模式”
  8. WebAPI——自动生成帮助文档
  9. matlab信号与系统论文,基于MATLAB的《信号与系统》课程教学研究
  10. python动态生成数据库表_ironpython – 如何通过python在Spotfire中动态创建数据表
  11. android导航栏动画,Android 带Lottie动画的导航栏
  12. 软件测试面试题和简历模板(面试前准备篇)
  13. 面向物联网的可重构流式深度卷积神经网络加速器
  14. 将 C++/WinRT 中的线程切换体验带到 C# 中来(WPF 版本)
  15. 第7章第30节:四图排版:四张图片交错对齐排列 [PowerPoint精美幻灯片实战教程]
  16. 无符号数与有符号数比较大小
  17. 2014 年第六届全国大学生数学竞赛江西赛区赣南师范学院获奖名单(数学专业)
  18. 【css画圆圈用线连接】
  19. 音视频入门-10-使用libyuv对YUV数据进行缩放、旋转、镜像、裁剪、混合
  20. android 人脸变形,人脸形变算法——液化变形

热门文章

  1. Android OpenGL ES 应用(二) 纹理
  2. 终端安装解决svn cannot set LC_CTYPE locale的问题
  3. 重用之前应仔细分析问题---------用错轮子有感
  4. java 蓝桥杯算法训练 特殊的数字四十
  5. php什么集成框架比较好,php哪个框架比较好?
  6. (39)FPGA面试技能提升篇(nandflash接口)
  7. RTT Nano+STM32F407ZGT6+LAN8720A+LWIP+CubeMX+MDK
  8. libevent的线程优雅的退出方式
  9. 【好文链接】从原理上搞懂PID
  10. mysql安装过程遇到的问题_个人在mysql安装过程中遇见的问题