带你进入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 = "[email protected]";
           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 = "[email protected]";
           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 = "[email protected]";
           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; }
}

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

时间: 2024-10-11 11:12:32

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

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

简介 Angular JS是采用JavaScript语言编写的客户端MVC框架,它为业界带了重大的变化,包括对模板化的创新实现,以及数据的双向绑定,这些特性使得它强大而易用.它可以用来帮助开发者编写单页面应用,尤其适合编写有大量CRUD操作的,具有Ajax风格的富客户端应用.大多数开发者认为,与其它框架相比,AngularJS明显缩减了项目所需的代码量. 2012年6月,Angular JS正式发布1.0版,在各种客户端MVC框架中,属于后起之秀.AngularJS主页(http://www.a

[Pro Angular.JS]学习笔记1.1:设置开发环境

可以使用yeoman.io,很方便.我已经写了一篇随笔,介绍如何使用.这里也有一篇介绍的文章:http://www.cnblogs.com/JoannaQ/p/3756281.html 代码编辑器,在Mac下用了一下WebStorm,太恶心了.另外发现书的作者使用的开发环境是Windows + VS Express 2013,为了方便学习,我也使用VS Express 2013 Update2.VS2013用起来蛮舒服的,把WebStorm比得跟驼屎一样.也许是因为我没用习惯吧. 1.安装Nod

angular js的一些操作

angular使开发应用变得简单,降低构建复杂应用难度!但是它依赖注入!anjular不操作dom节点而是一个作用域 要操作作用域 就要先绑定,如何绑定一个作用域呢? 首先在页面引入 <script src="anjular.js">文件! <html ng-app></html>意思就是把整个html页面当做作用域! 绑定作用域是“ng-app” 绑定好作用域就可以对作用域内的绑定表达式进行数据绑定 <body> hello{{“wor

Angular.JS 之 全局对象变更的实时响应

AngularJS是一款来自Google的前端JS框架,体积非常小,但是设计理念和功能却非常强大. 教程 AngularJS中文社区 问题 在一款Web应用中,虽然我们尽可能的避免无节制地使用全局变量,但有时确实需要一些全局变量的存在已保证在所有页面中都能处理某些事件. 在本文的例子中,该应用需要在安卓平台上接收手机短信并实时响应(此处先撇开具体的实现插件,接收和发送短信都用控制台来模拟),为此我们定义了一个JavaScript的全局对象如下: 1 var native_accessor = {

对于Angular JS中$apply()的理解

最近在学angularjs知识,在网上找到这篇文章,来自于:http://my.oschina.net/u/1402334/blog/500683,解决了我目前面临的一些问题,感觉收获很大,特此转过来做个记录: Angular最引人注目的特性就是双向绑定,然而它是怎么做到的,我可以来总结两点: 将变化的数据从model传向view-->$apply 将变化的数据从view传向model-->$watch 这连个函数都是基于scope的基础上,对scope对象的成员变化状况进行传播的.那么,我不

开发Ionic应用前Angular js必备知识

Angular js是一个Web应用框架,它极其流行,已经成为目前使用最广泛的Javascript工具之一.Ionic基于AngularJS构建而成,所以学习一些AngularJS的知识很有必要.Ionic并没有独立开发一套完整的Web应用框架,而是对AngularJS进行了扩展,给它添加了大量界面组件和其他的移动端友好的特性. 本篇文章会带你了解AngularJS的核心知识并介绍一些基础知识.我们学会控制器,顾名思义,它会控制(control)你的数据.接着我们介绍作用于,它会连接控制器和用户

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

这也是最近遇到的坑,还是之前那个项目,现在要实现登录功能. 背景:注册功能之前已经跑通了.前端用的是jquery后台是springMVC.鉴于注册和登录有些接口功能是类似的(比如注册确保邮箱是没有注册过,而登录是确保注册过),于是后台还准备用注册的那套接口. 登录的接口get请求是没问题的,但是post却出了问题:后台收不到请求体里的内容. 后来发现是jquery和angular的post行为有些区别,于是我做了个实验. <!DOCTYPE html> <html lang="

angular js 使用$location问题整理

angular js 自带的$location方法十分强大,通过使用$location方法,我们可以获取到服务器的端口.杂乱连接中的path()部分(/所包含的部分): 例: // given url http://example.com/#/some/path?foo=bar&baz=xoxo var path = $location.path(); // => "/some/path" 但是在使用location之前,应该在文件的开头定义一下内容 /* * 定义ang

Angular.js入门(1)

1.Angular优点     1. 模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令:    2. 是一个比较完善的前端MVC框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能:    3. 自定义Directive,比jQuery插件还灵活,但是需要深入了解Directive的一些特性.    4. ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助,我们的项目从上线到目前,UI变