带你进入Angular js的大门
首先需要指出什么是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的大门的更多相关文章
- Angular JS 学习之Bootstrap
1.要使用Bootstrap框架,必须在<head>中加入链接: <link rel="stylesheet" href="//maxcdn.boots ...
- 精通 Angular JS 第一天——Angular 之禅
简介 Angular JS是采用JavaScript语言编写的客户端MVC框架,它为业界带了重大的变化,包括对模板化的创新实现,以及数据的双向绑定,这些特性使得它强大而易用.它可以用来帮助开发者编写单 ...
- [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]
这是"AngularJS - 七步从菜鸟到专家"系列的第三篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.第二篇我们讨论了scope和 $scope 的功能. 通过这整个系列的教程 ...
- {{angular.js 使用技巧}} - 基于验证框架的扩展(w5cValidator)
开场白: angular.js 是谷歌出的前端js MV*框架,我也是今年做 worktile 的时候才开始接触的,起初技术选型的时候还准备使用 backbone(毕竟很多大公司在使用他,而且也是比较 ...
- Angular.js之指令学习笔记
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- Angular Js 与bootstrap, angular 与 vue.js
今天突然接到电话, 问我他们的区别 虽然平时看了,但是没记住,凉凉是肯定的 总结一下: bootstrap不算是javascript框架,它只是一个前端的ui框架,然后有一些附带的js插件而已.an ...
- angular js jquery中post请求的一点小区别
这也是最近遇到的坑,还是之前那个项目,现在要实现登录功能. 背景:注册功能之前已经跑通了.前端用的是jquery后台是springMVC.鉴于注册和登录有些接口功能是类似的(比如注册确保邮箱是没有注册 ...
- angular js 使用$location问题整理
angular js 自带的$location方法十分强大,通过使用$location方法.我们能够获取到server的port.杂乱连接中的path()部分(/所包括的部分). 例: // give ...
- Angular JS 中的内置方法之表单验证
angular js 结合html5 可以实现强大的表单验证功能 关闭html5自带的表单验证功能可以用
随机推荐
- Unity亚洲开发者大会会议简录之技术篇,Profiler的一些参数的意思
2014Unity亚洲开发者大会会议简录之技术篇 拖公司的福,有幸去了一趟北京参加了一场Unity3D的交流盛宴,在为期两天的时间内,不仅有着技术上收获,也有心灵上的震撼.现在先来说说技术方面的一些比 ...
- 三星Gear VR与Oculus Rift DK2全方位比拼
网易数码1月6日消息,Oculus Rift DK2并不是面向消费者的产品,而三星Gear VR则进入了大众市场.虽然二者有点不同,但还是值得对比一番,看看Gear VR相比当下虚拟现实领域佼佼者Oc ...
- Codevs 1425 最长公共子串
1425 最长公共子串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 输入N(2<=N<= ...
- Spring源码(一)
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</lis ...
- win10子系统linux编译ffmpeg
android-ndk-r14b(linux版) ffmpeg-4.0 开启win10子系统(控制面板->程序和功能->启用或关闭Windows功能 然后在 适用与 Linux 的 Win ...
- Codeforces 1142A(性质、暴举)
队友和大佬都什么几种情况啥的……我是把终点都插了,起点随便选一个,暴举答案莽A. ; ll n, k, a, b, aa, minn = INF, maxx = -; set<ll> bb ...
- odoo8 报表页面修改和字体设置
版本8.0, 想要发票修改报表页眉的内容,去公司设置下修改,返现无论如何也不生效. 放狗后得知: You probably already know that you can customise th ...
- game 竞赛图 缩环
[问题背景] zhx 和他的妹子(们)做游戏. [问题描述] 考虑 N 个人玩一个游戏, 任意两个人之间进行一场游戏 (共 N*(N-)/ 场) , 且每场一定能分出胜负. 现在,你需要在其中找到三个 ...
- jQuery.Deferred(jQuery1.5-2.1)源码剖析
jQuery.Deferred作为1.5的新特性出现在jQuery上,而jQuery.ajax函数也做了相应的调整.因此我们能如下的使用xhr请求调用,并实现事件处理函数晚绑定. var promis ...
- uvm_monitor——借我一双慧眼
monitor 用来捕获(监视)和检查总线的信号是否满足预期的要求.所有的user_monitor 继承自uvm_monitor,uvm_monitor继承自uvm_component,从源代码来看里 ...