首先需要指出什么是angular js,其实说白了angular js就是Javascript的一个类库,我们使用这个类库可以很容易的创建web页面。双向绑定是angular js其中的一个重要特征,这也是相对于其他的Javascript的类库来说angular js中很重要的特征。双向绑定即是当你修改任何属性的值的时候,相关联的html元素也将改变,你并不需要额外的去修改。

  Angular js还为我们提供了MVVM(Model View ViewModel)的模型。MVVM的意思就是说Model是一个真实的对象,我们使用这个对象创建需要在页面显示的模型,并且调用视图模型。View(视图)即是我们需要输出的页面。

  背景

  如果你没有使用angular js或者其它的和angular js有相似功能的类库,比如knockout.js,那么当我们编写代码的时候将会写更多更复杂的代码。所以说使用angular js编写应用程序更快更高效,并且比其它的类库更容易管理。

  代码使用

  下面我们将通过一个简单的例子来逐渐的了解angular js。

  为了更好的理解angular js的知识,我们使用asp.net作为后台的应用程序来实现简单的增删改查的操作,并且在这个例子中我们使用的是静态列表形式来展现增删改查的操作。

  在数据模型中有5个属性,UserName、Address、Salary、IsMarried和Email。在视图中列出了这些属性的记录,并且在每一条数据后面都有一个删除和修改按钮。通过这些按钮我们能创建、修改和删除静态列表。

  现在首先让我们了解一下以下例子中使用到的属性的含义

  data-ng-app——表明这是angular 要处理的元素

  data-ng-controller——指定用来处理此元素的angular 控制器

<div id="divUserList" data-ng-app="userApp" data-ng-controller="userAppCtrl"> </div>

  data-ng-bind——指定该元素绑定model中的哪个属性(上面列出的UserName、Address、Salary、IsMarried或者是Email)

<strong data-ng-bind="UserName"></strong>

  比如UserName是Model的属性并且将该属性绑定到定义的元素

  data-ng-repeat——用来指定循环的数据

<tr data-ng-repeat="x in UserData | limitTo:20"  >

  使用上面的语法,我们对UserData这个angular对象属性进行循环,取出里面的数据。limitTo:20表明最多循环20次,这是angular中的一个过滤器。当然angular.js中还可以使用其他的过滤器,比如uppercase、lowercase和currency等。

  data-ng-click——用来绑定点击事件

<input type="button" id="btnDelete" value="Delete" data-ng-click="DeleteRow($index)" />

  $index——表示循环中的索引

  data-ng-model——将angular 模型应用于html dom中,这表示当修改input输入框中的值时相应的model中的属性也会改变

<input type="text" data-ng-model="UserName" required />

  data-ng-disabled——通过该属性的值来禁用某个元素或者不禁用

<input type="button" id="btnSaveAll" value="Save" data-ng-click="SaveRecord()" data-ng-disabled="CheckRecord()" />

  下面让我们看一下下面的代码

var angularuserApp = angular.module("userApp", []);
angularuserApp.controller("userAppCtrl", function ($scope, $http, $interval, $window,$timeout) {})

  第一行代码创建了一个对象,这是由html dom中data-ng-app指定的。另一行代码创建了一个控制器,是由data-ng-controller指定的。

  $http用来指定服务端的地址;$interval $timeout就类似于jquery中的interval和timeout,这两个变量在这个例子中只是定义但并没有被使用到,其工作原理和jquery中的相同;$window的定义和Javascript中的window对象相同,使用这个变量可以实现你想用window对象实现的效果。

  下面是所有HTML代码

<div id="divUserList" data-ng-app="userApp" data-ng-controller="userAppCtrl">
   <table class="table-striped table-hover" style="width:100%;">
       <colgroup>
           <col style="width:15%;"/>
           <col style="width:25%;" />
           <col style="width:10%;" />
           <col style="width:10%;" />
           <col style="width:15%;" />
           <col style="width:10%;" />
           <col style="width:7%;" />
           <col style="width:7%;" />
       </colgroup>
       <thead>
           <tr>
               <th>User Name</th>
               <th>Address</th>
               <th>Email</th>
               <th>Salary</th>
               <th>Is Married</th>
           </tr>
       </thead>
       <tbody>
           <tr data-ng-repeat="x in UserData | limitTo:20"  >
               <td>
                   <strong data-ng-bind="x.UserName"></strong>
               </td>
               <td><span data-ng-bind="x.Address"></span></td>
               <td><span data-ng-bind="x.Email"></span></td>
               <td><span data-ng-bind="x.Salary"></span></td>
               <td><span data-ng-bind="x.IsMarried"></span></td>
               <td><input type="button" id="btnEdit" value="Edit" data-ng-click="EditRow(x)" /> </td>
               <td><input type="button" id="btnDelete" value="Delete" data-ng-click="DeleteRow($index)" /> </td>
           </tr>
       </tbody>
   </table>
   <br />
   <br />
   <form name="myform" novalidate>
       <h3> Edit User Information </h3>
       <table class="table-striped table-hover" style="width:100%;">
           <tr>
               <td>
                   User Name :
               </td>
               <td>
                   <input type="text" data-ng-model="UserName" required />
               </td>
           </tr>
           <tr>
               <td>
                   Address :
               </td>
               <td>
                   <input type="text" data-ng-model="Address" required />
               </td>
           </tr>
           <tr>
               <td>
                   Email :
               </td>
               <td>
                   <input type="email" data-ng-model="Email" />
               </td>
           </tr>
           <tr>
               <td>
                   Salary :
               </td>
               <td>
                   <input type="number" data-ng-model="Salary" />
               </td>
           </tr>
           <tr>
               <td>
                   Is Married :
               </td>
               <td>
                   <input type="checkbox" data-ng-model="IsMarried" />
               </td>
           </tr>
           <tr>
               <td colspan="2">
                   <input type="button" id="btnSaveAll" value="Save" data-ng-click="SaveRecord()" data-ng-disabled="CheckRecord()" />
                   <input type="button" id="btnClear" value="Clear" data-ng-click="ClearRecord()" data-ng-disabled="CheckRecord()" />
               </td>            </tr>
       </table>
   </form>
</div>
<script>
   var angularuserApp = angular.module("userApp", []);
   angularuserApp.controller("userAppCtrl", function ($scope, $http, $interval, $window, $timeout) {
       //==Intit Value================
       $scope.UserName = "";
       $scope.Address = "";
       $scope.Email = "";
       $scope.Salary = null;
       $scope.IsMarried = null;
       //==Intit Value================
       $scope.LoadIntialData = function () {
           var routeurl = '@Url.Action("GetData", "User")';
           $http.get(routeurl).success(function (data) {
               $scope.UserData = data;
           }).error(function (e) {
               // error handling
           });
       }
       $scope.LoadIntialData();
       $scope.DeleteRow = function (index) {
           $scope.UserData.splice(index, 1);
           //==================if you use real time application then need to call to conroller from remove record from db=======
       }
       $scope.EditRow = function (ele) {
           $scope.UserName = ele.UserName;
           $scope.Address = ele.Address;
           $scope.Email = ele.Email;
           $scope.Salary = ele.Salary;
           $scope.IsMarried = ele.IsMarried;
       }
       $scope.SaveRecord = function () {
           var invalidfiled = "";
           if (!$scope.myform.$valid) {
               return;
           }
           else {
               var IsItemUpdate = false;
               $.each($scope.UserData, function (i, n) {
                   if (n.UserName == $scope.UserName && n.Address == $scope.Address) {
                       IsItemUpdate = true;
                       n.Email = $scope.Email;
                       n.Salary = $scope.Salary;
                       n.IsMarried = $scope.IsMarried;
                   }
               });
               if (IsItemUpdate == false) {
                   var obj = new Object();
                   obj.UserName = $scope.UserName;
                   obj.Address = $scope.Address;
                   obj.Email = $scope.Email;
                   obj.Salary = $scope.Salary;
                   obj.IsMarried = $scope.IsMarried;
                   $scope.UserData.unshift(obj);
               }
               $scope.ClearRecord();
               //==================if you use real time application then need to call to conroller from save record from db=======
           }
       }
       $scope.CheckRecord = function () {
           if ($scope.UserName != "" && $scope.Address != "")
               return false;
           else
               return true;
       }
       $scope.ClearRecord = function () {
           $scope.UserName = "";
           $scope.Address = "";
           $scope.Email = "";
           $scope.Salary = null;
           $scope.IsMarried = null;
       }
   });
</script>

  下面是控制器的实现代码

public class UserController : Controller
  {
      //
      // GET: /User/
      public ActionResult Users()
      {
          return View();
      }       public JsonResult GetData()
      {
          List<User> objList = new List<User>();           //==Create the test data for in view  ============================
          User objuser = new User();
          objuser.UserName = "Pragnesh Khalas";
          objuser.Address = "B-25 Swaminarayan Park Naroda Ahmedabad";
          objuser.Email = "pragnesh@gmail.com";
          objuser.Salary = 9000;
          objuser.IsMarried = true;
          objList.Add(objuser);           objuser = new User();
          objuser.UserName = "Rahul Patel";
          objuser.Address = "A-40 Navkar Soci. Ahmedabad";
          objuser.Email = "rahul@gmail.com";
          objuser.Salary = 8000;
          objuser.IsMarried = true;
          objList.Add(objuser);           objuser = new User();
          objuser.UserName = "Bhavin Patel";
          objuser.Address = "D-10 Bharat Soci. Ahmedabad";
          objuser.Email = "bhavin@gmail.com";
          objuser.Salary = 6000;
          objuser.IsMarried = true;
          objList.Add(objuser);           return Json(objList, JsonRequestBehavior.AllowGet);
      }
  }

  下面是模型代码

public class User
{
   [Required]
   public string UserName { get; set; }    [Required]
   public string Address { get; set; }    [EmailAddress]
   public string Email { get; set; }    public double? Salary { get; set; }
   public bool? IsMarried { get; set; }
}

  以上就是本文的整体内容,希望对你有所帮助。

带你进入Angular js的大门的更多相关文章

  1. Angular JS 学习之Bootstrap

    1.要使用Bootstrap框架,必须在<head>中加入链接: <link rel="stylesheet" href="//maxcdn.boots ...

  2. 精通 Angular JS 第一天——Angular 之禅

    简介 Angular JS是采用JavaScript语言编写的客户端MVC框架,它为业界带了重大的变化,包括对模板化的创新实现,以及数据的双向绑定,这些特性使得它强大而易用.它可以用来帮助开发者编写单 ...

  3. [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]

    这是"AngularJS - 七步从菜鸟到专家"系列的第三篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.第二篇我们讨论了scope和 $scope 的功能. 通过这整个系列的教程 ...

  4. {{angular.js 使用技巧}} - 基于验证框架的扩展(w5cValidator)

    开场白: angular.js 是谷歌出的前端js MV*框架,我也是今年做 worktile 的时候才开始接触的,起初技术选型的时候还准备使用 backbone(毕竟很多大公司在使用他,而且也是比较 ...

  5. Angular.js之指令学习笔记

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  6. Angular Js 与bootstrap, angular 与 vue.js

    今天突然接到电话, 问我他们的区别  虽然平时看了,但是没记住,凉凉是肯定的 总结一下: bootstrap不算是javascript框架,它只是一个前端的ui框架,然后有一些附带的js插件而已.an ...

  7. angular js jquery中post请求的一点小区别

    这也是最近遇到的坑,还是之前那个项目,现在要实现登录功能. 背景:注册功能之前已经跑通了.前端用的是jquery后台是springMVC.鉴于注册和登录有些接口功能是类似的(比如注册确保邮箱是没有注册 ...

  8. angular js 使用$location问题整理

    angular js 自带的$location方法十分强大,通过使用$location方法.我们能够获取到server的port.杂乱连接中的path()部分(/所包括的部分). 例: // give ...

  9. Angular JS 中的内置方法之表单验证

    angular js 结合html5 可以实现强大的表单验证功能 关闭html5自带的表单验证功能可以用

随机推荐

  1. C++中的声明与定义

    转自:http://www.cnblogs.com/kingcat/archive/2011/12/30/2307426.html C++是一种复杂的计算机语言,很多在现代高级语言中已经不需要程序员操 ...

  2. Codevs 1293 送给圣诞夜的极光

    1293 送给圣诞夜的极光  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 圣诞老人回到了北极圣 ...

  3. 最新的vue没有dev-server.js文件,如何进行后台数据模拟?

    最新的vue里dev-server.js被替换成了webpack-dev-conf.js 在模拟后台数据的时候直接在webpack-dev-conf.js文件中修改 第一步,在const portfi ...

  4. docker Mac安装和使用

    1.安装docker brew cask install docker 2.安装后可以用命令查看版本 docker --version 3.build java 项目(jar) docker buil ...

  5. [题解](背包)luogu_P4095 eden的新背包问题

    有一点乱搞吧......对人对背包的理解有些考验,要想知道去掉某个点的值,可以选择对前缀求一次背包,后缀求一次背包,而且不省掉价钱那一维, 这样每个点就可以由前后组合成了,枚举一下价钱取max即可 直 ...

  6. [BZOJ5219]最长路径

    Description 在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建n(n-1)/2条单向道路,对于任意两个不同的点i和 j,在它们之间有且仅有一条单向道路,方向要么是i到j, ...

  7. Excel 通过pl/sql导入到数据库 文本导入器 odbc导入器

     Excel 通过pl/sql导入到数据库 第一种方法:文本导入器 1.准备Excel导入数据   jc.xls 2.把 jc.xls 文件 改为 jc.csv文件 3.在数据库里建一张jc表(FLH ...

  8. Jquery测试纠错笔记

    一. 解析: 获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one + ...

  9. activity间的传参

    Intent有两个作用:激活组件和附带数据 激活另一个activity的方法显示意图:  1.  Intent intent = new Intent();       intent.setClass ...

  10. [windows]解决Win7访问Windows 2003、XP共享慢的问题

    解决方法: 1. 修改网卡配置打开本地连接属性,点击"配置"在"高级"选项卡中,将"大型发送分载(IPv4)"的值设置成"禁用&q ...