每当看到前端程序员在脚本、样式、表单处理逻辑中苦苦挣扎的时候,我就在想,为什么不用Angular Js 呢?

Angular Js 支持页面前端的 MVC 模式开发,在 Angular JS 的支持下,我们可以将页面前端处理的数据与页面展示进行分离,实现优雅的代码结构。

首先,我们需要到 AngularJs 的官网下载这个脚本库。

地址:https://angularjs.org/

不过,这个网站经常被封,你也可以直接在这里下载: http://files.cnblogs.com/haogj/AngularJs-1.3.10.zip

1. 在页面引用 AngularJs 脚本

AngularJs 是一个独立的脚本库,许多人询问是否还需要 jQuery,答案是不需要。你只需要在页面引用 AngularJs 的脚本文件就可以了,甚至,AngularJs 还实现了一个精简版的 jQuery。不过它也可以和 jQuery 一起使用。

在 ASP.NET MVC 的页面视图中,可以直接引用,也可以通过 @section 将脚本放置到布局 Layout 的 scripts 节中。

@section scripts {
<script src="~/Scripts/angular-1.3.10.min.js"></script>
<script>
</script>
}

2. 创建 WebApp 和控制器

在 AngularJs 中,每个页面被看作一个独立的 WebApp,每个 WebApp 中可以包括多个独立的处理部分,我们称为 Controller,每个 Controller 有自己独立的处理上下文和逻辑。

AngularJs 通过指令 ng-app 来划定这个 WebApp 的作用域,通常可以将这个 ng-app 直接写在 html 标记之上,也可以写在一个元素之上,我们这里写在这个视图中的 div 标记之上。

ng-controller 用来划定 WebApp 中的控制器的作用域,通常,我们会给它起一个名字。

<div ng-app="myApp">
<div ng-controller="myController"> </div>
</div>

下面,在脚本中创建我们的 WebApp 和控制器。

 <script src="~/Scripts/angular-1.2.14.min.js"></script>
<script>
var app = angular.module("myApp", []); app.controller("myController", function ($scope, $http) {
$scope.message = "Hello, Angular JS.";
});
</script>

上面的第三行创建 WebApp,注意第一个参数是应用的名称,需要与页面指令中的 WebApp 名称匹配,第二个参数数组是必须的。

第五行创建了应用中的控制器,特别需要注意的是控制器的匿名函数参数,这两个参数的名称不可以修改,在 AngularJs 中,参数的名称用来进行依赖注入。

第一个参数 $scope 就是这个控制器的上下文对象,通过它我们将模型,视图,和处理逻辑粘合在一起。

3. 创建视图

在 AngularJs 中,视图是通过标准的 HTML 实现的。

注意,我们上面代码的第 6 行,我们在上下文对象上保存了一个 message ,这就是我们的模型,我们希望这个模型中的数据,可以在页面展示出来。

在 Controller 的元素内部,创建一个新的 div 来容纳我们的内容,我们准备使用 h2 标记将这个 message 的内容显示出来。

视图怎样与我们的模型绑定在一起呢?各种模板都有自己的绑定语法,AngularJs 的方式是 {{ }}。其中可以写一个表达式。

<div ng-app="myApp">

    <div ng-controller="myController">

        <div>
<h2>{{message}}</h2>
</div> </div> </div>

现在运行一下程序,你应该已经在页面看到输出结果了。

4. 实现模型和视图的双向绑定

如果我们需要编辑这个 message 呢?编辑之后如何获取编辑之后的内容呢?angularjs 支持双向绑定,也就是说既可以从我们的模型获取数据,如果数据被编辑了,编辑之后的内容也通过可以被 angularjs 同步到模型上。

双向绑定实际上是 angularjs 内部支持的,我们并不需要特别的编码。在这里我们添加一个编辑框来支持编辑。

<div ng-app="myApp">

    <div ng-controller="myController">

        <div>
<h2>{{message}}</h2>
<input type="text" ng-model="message" />
</div> </div> </div>

注意 input 元素的 ng-model 属性,它表示我们需要双向绑定 message 到这个编辑元素上。

重新运行程序,你看到 message 的内容也同步出现在编辑框中,如果你修改编辑框中的内容,标题中的内容也将会同步变化。你的编辑结果已经同步到了模型上。

总结

angularJs 是一个比较重的脚本库,虽然内部高度复杂,注意关键的使用细节,使用起来其实非常简单。

AngularJs 入门系列-1 使用 AngularJs 搭建页面基本框架的更多相关文章

  1. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(上)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(上) 前面我们已经学习了一个成熟的脚手架(vue-cli),笔者希望通过这个脚手架快速搭建系统(或项目).而展开搭建最好 ...

  2. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(下)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(下) 上篇 我们已经成功引入 element-ui.axios.mock.iconfont.nprogress,本篇继续 ...

  3. 数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例)

    数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例) 简介 scikit-learn 估计器 加载数据集 进行fit训练 设置参数 预处理 流水线 结尾 数据挖掘入门系 ...

  4. AngularJs 入门系列-2 表单验证

    对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $sco ...

  5. Angular系列---- AngularJS入门教程03:AngularJS 模板(转载)

    是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模 ...

  6. Angular系列----AngularJS入门教程01:AngularJS模板 (转载)

    是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模 ...

  7. [转载]AngularJS入门教程02:AngularJS模板

    是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模 ...

  8. Netty入门系列(1) --使用Netty搭建服务端和客户端

    引言 前面我们介绍了网络一些基本的概念,虽然说这些很难吧,但是至少要做到理解吧.有了之前的基础,我们来正式揭开Netty这神秘的面纱就会简单很多. 服务端 public class PrintServ ...

  9. springboot入门(一)--快速搭建一个springboot框架

    原文出处 前言在开始之前先简单介绍一下springboot,springboot作为一个微框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...

随机推荐

  1. Git基本命令

    获取master: git clone ssh://some.i.p/some/source/~/somerep 获取branch: git clone -b branch-version ssh:/ ...

  2. 【solr】solr5.0整合tomcat

    1.下载 solr版本必须和lucene版本一致,这个链接http://archive.apache.org/dist/lucene/是apache子项目库,在这里可以下载lucene,我这里使用的是 ...

  3. js常用方法收集

    JS获取地址栏制定参数值: //获取URL参数的值 function getUrlParam(name){ var reg = new RegExp("(^|&)"+ na ...

  4. IO操作 第一篇 学习(转载)

    问题8:如何使用通配符搜索指定目录内的所有文件: 解决方案: 使用DirectoryInfo.GetFiles方法的重载版本,它可以接受一个过滤表达式,返回FileInfo数组,另外它的参数还可以指定 ...

  5. C#程序集编译输出XML文档的作用

    下图是ClassLib1类库的项目属性 /// <summary> /// 读取INI文件 /// </summary> /// <param name="Se ...

  6. 值得推荐的C/C++框架和库 (真的很强大)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  7. SG函数

    入门一: 首先来玩个游戏,引用杭电课件上的: (1) 玩家:2人:(2) 道具:23张扑克牌:(3) 规则:游戏双方轮流取牌:每人每次仅限于取1张.2张或3张牌:扑克牌取光,则游戏结束:最后取牌的一方 ...

  8. hdu 1532 Dinic模板(小白书)

    hdu1532 输入n,m. n条边,m个点,之后给出a到b的容量,求1到m的最大流. 注意:Dinic只能调用一次,因为原理是改变cap的值,如果调用多次一样的,那么第一次会对,其余的都会是0,因为 ...

  9. HDU5221 Occupation 树链剖分

    题意: 给出一棵树,root=1,树有点权,有一个人叫做M 有3种操作: 1 u v 把u到v路径上的所有点的点权都给M 2 u 若u的点权在M手上,拿走 3 u 把u为根的子树的所有点权都给M 每一 ...

  10. NeHe OpenGL教程 第二十课:蒙板

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...