使用典型的类库时,你可以选择并使用你所喜欢的功能;而对于angularjs框架来说,必须把它看成一个完整的套件来使用,框架中的所有的东西都包含在里面,接下来将会介绍angular的基础模块,这样你就可以理解它们是如何被装配在一起的。

  调用Angular

  为了使用angular,所有的引用都必须做两件事情:

  1、加载angular库。

  2、使用ng-app指令告诉angular应该管理DOM中的那一部分。

  加载脚本

  加载类库的操作非常简单,与其他javascript类库遵循同样的规则。

  使用ng-app声明Angular的边界

  你可以使用ng-app指令告诉angular管理页面的那一块。如果你正在构建一个纯angular应用,那么你应该把ng-app写在html标签中,如:、

  <html ng-app>

  ……

  </html>

  如果只想管理页面中某一个部分,那么可以这样写:

  

  <html>

    <div  ng-app>

      ……

    </div>

  </html>

  

  Model View Controller

  angular本身是支持MVC风格的应用设计。尽管angular有很大的灵活性,但是一下的风格会经常涉及:

  1、用来容纳数据的模型,模型代表应用当前的状态。

  2、用来展示数据的一些试图。

  3、用来管理数据和模型之间的一些控制器。

  eg. var sometext='you hava started your journey.';

  你将会使用对象的属性来创建数据模型,甚至只用数据基本类型来存储数据;你可一编写一个HTML页面来创建试图,然后把它和你数据中的模型融合起来

  eg.<p>{{sometext}}</p>

  我们把这叫做双括号插值语法

  把以上东西整合起来就有了如下内容:

  

 <!DOCTYPE html>
<html ng-app="textApp">
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<script src="static/js/angular.js" type="text/javascript"></script>
<script src="static/app/controller/controller.js" type="text/javascript"></script>
</head>
<body ng-controller="TextController">
<p>{{sometext}}</p>
</body>
</html>
 !(function (){
var app= angular.module('textApp',[]);
app.controller('TextController', function ($scope) {
$scope.sometext = 'you hava started your journey.';
});
}());

  

  模版和数据绑定

  angular中的模版只是一些HTML的一些片段而已,我们可以从服务器上加载,也可以在<script>标签中定义,处理方式与其他所有静态资源相同

  基本的运作流程如下:

  1、用户请求用户起始页。

  2、用户的楼兰其向服务器发起一次HTTP连接,然后加载页面,这个页面里面包含了模版。

  3、angular被加载到页面中,等待页面加载完成,然后查找ng-app指令用来定义模版边界。

  4、angular遍历模版,查找指令和绑定关系,这将出发一系列动作:注册监听器、执行一些DOM操作、从服务器获取初始化数据。这项工作的最后结果是,应用将会启动起来,最后模版会转换成dom视图

  5、连接到服务器去加载需要展示给用户的其他数据。 

  对于每一个angularjs应用来说,步骤1到步骤3都是必须的,但是步骤4和步骤5是可选的。 

  

  显示的文本

    1、ng-bind指令

    2、{{}}方式

  对于输出的内容是等价的。那么为什么还要出现ng-bind指令呢?我们使用{{}}会是代码阅读起来更加简洁,但是在angular使用数据来替换化括号之前,{{}}有可能会被用户看到,而第一种则不会遭遇这种问题。造成这种现象的原因是,浏览器需要先加载HTML页面,渲染它,然后angular才会有机会去把她解释成你期望看到的内容。

  表单输入  

   Angular表单元素非常方便。如:

 

 <form ng-controller="someController">
<input type="checkbox" ng-model="youCheckedIt"/>
</form>

 这样做的含义是:

 1、当用户选择了复选框之后,SomeController中的$scope中的youCheckedIt的属性就会变成true,而反选复选框youCheckedIt的属性就会变成false。

 2、如果在控制器中把$scope.youCheckedIt的值设置为false时,UI中复选框就会反选。反之,则勾选复选框。 

 当一个文本框被改变的时候,某个方法就会被调用做出一些列的逻辑操作,可以使用ng-change来指定一个控制器方法,如:

 

 <!DOCTYPE html>
<html ng-app="myapp">
<head>
<meta charset="UTF-8">
<title></title>
<script src="static/js/angular.js" type="text/javascript"></script>
<script src="static/app/controller/form.js" type="text/javascript"></script>
</head>
<body>
<form ng-controller="myController">
Staring: <input type="text" ng-change="computerNeeded()" ng-model="fundaing.starting"/>
Recommendation:{{fundaing.needed}}
</form>
</body>
</html>
 var app=angular.module('myapp',[]);
app.controller('myController', function ($scope) {
$scope.fundaing={starting:0};
computerNeeded= function () {
$scope.fundaing.needed=$scope.fundaing.starting * 10;
}; $scope.$watch('fundaing.starting',computerNeeded);
});

 其中最基本的一点就是$watch,就是你可以调用$watch函数来监视一个表达式,当这个表达式发生变化时,就会调用这个函数。

  

  列表、表格以及其他迭代型元素 

  ng-repeat可能是最有用的angular的指令了,它可以根据集合中的元素一次创建多份拷贝。不管在什么地方,只要想创建一组事物的列表,你就可以使用这条指令。如:

 

 <!DOCTYPE html>
<html ng-app="textApp">
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<script src="static/js/angular.js" type="text/javascript"></script>
<script src="static/app/controller/controller.js" type="text/javascript"></script>
</head>
<body>
<div ng-controller="repeatController">
<li ng-repeat="item in items">
<a href="">{{item.name}}</a>
<span>{{item.age}}</span>
</li>
</div>
</body>
</html>
 !(function (){
var app= angular.module('textApp',[]); app.controller('repeatController', function ($scope) {
var items=[
{name:"张三",age:20},
{name:"李四",age:22},
{name:"王五",age:24}
];
$scope.items=items;
}); }());

 

 隐藏和显示

 ng-show、ng-hide这两条指令的功能是等价的,但是运行效果正好相反,它们都可以通过你所传递的表达式来显示和隐藏元素。

  

 css类和样式 

 假如有的一段css样式

 .menu-disabled-true{

   color:#ccc;

 }

 使用以下模版:

 

 <div ng-controller="deathMenuController">
<ul>
<li class="menu-disabled-{{isDisabled}}">菜单</li>
</ul>
</div>
 app.controller('deathMenuController', function ($scope) {
$scope.isDisabled=true;
});

效果如下:

但是这种方法一点也不好,虽然灵活性比较好,但是在大型项目中根本不好维护,进而无法创建CSS。

正因为这个原因,angular提供了ng-class和ng-style指令,表达式的结果,可能是如下取值之一:

1、表示CSS类名的字符串,一空格分割

2、CSS类名数组

3、CSS类名到布尔值的映射

首先,我们来想象一下,如果想在页面的头部得到操作信息

.error{background-color:#f00;}.warning{background-color:yellow;}使用ng-class应该怎么做?

代码如下:

 <div ng-controller="HeaderController">
<div ng-class="{error:isError,warning:isWarn}">{{messageText}}</div>
<button ng-click="showError()">Error</button>
<button ng-click="showWarn()">Warn</button>
</div>
    app.controller('HeaderController', function ($scope) {
$scope.isError=false;
$scope.isWarn=false;
$scope.showError= function () {
$scope.messageText="this is error";
$scope.isError=true;
$scope.isWarn=false;
};
$scope.showWarn= function () {
$scope.messageText="this is warn";
$scope.isError=false;
$scope.isWarn=true;
};
});

我们还可以做一些更炫的事情:如表格列表把选中的行高亮显示。

.selected{

  background-color: #78FA89;

}

代码如下:

<table ng-controller="TableController">
<tr ng-repeat="item in items" ng-class="{selected:$index==selectrow}" ng-click="selected($index)">
<td>{{item.name}}</td>
<td>{{item.cuisine}}</td>
</tr>
</table>
     app.controller('TableController', function ($scope) {
var items=[
{name:'Heifer',cuisine:'BBQ'},
{name:'Green',cuisine:'Salads'},
{name:'Fish',cuisine:'Seafood'}
]; $scope.items=items;
$scope.selected= function (row) {
$scope.selectrow=row;
};
});

效果所示:

反思src和href属性

当在<img>或者<a>标签上进行数据绑定时,在src或者href属性上简单的使用{{}}无法很好的运行。由于浏览器会使用并行的方式来加载图片和其他内容,所有angular没有机会拦截到数据绑定请求。<img>最自然的用法是<img src="data:images/{{currentname}}"> 但其实,这里应该使用ng-src指令:<img ng-src="data:images/{{currentname}}">,当然对于<a>标签,应该使用ng-href指令:

<a ng-href="shop/{{number}}">商品1</a>

表达式

在模版中使用表达式是为了以充分的灵活性在模版、业务逻辑和数据之间建立联系,同时又能避免业务逻辑渗透到模版中。

表达式是通过angualr内置解析器执行的,在这关解析器中你找不到循环结构、流程控制操作符,以及修改数据的操作符。当你需要这些类型的操作时,请你在控制器中执行或者在指令中执行。

angularjs应用骨架的更多相关文章

  1. angularjs应用骨架(2)

    时隔一个星期,接着上一篇的angularjs应用骨架继续聊聊angularjs其他的其他的内容. 区分UI和控制器的职责 在应用控制器中有三种职责: 1.为应用中模型设置初始状态 2.通过$scope ...

  2. angularjs应用骨架(3)

    好,继续上一章节我们继续聊聊angularjs骨架.开发任何一款优秀的应用都会面临一项非常困难的工作,那就是找到一种合适的方式方法把代码组织在合适的功能范围内.我们已经看过控制器的处理方式,它会提供一 ...

  3. angularjs应用骨架(4)

    继续上一篇 继续了解angular其他内容. 与服务器交互 真正的应用需要和真实的服务器进行交互移动应用和新兴的Chrome桌面应用可能是例外.但是对于此外的所有应用来说,无论是想把数据持久化到云端还 ...

  4. 用angularjs开发下一代web应用(二):angularjs应用骨架(二)

    1.浅谈非入侵式JavaScript <div ng-click="doSomething()">...</div>这些指令和原来的事件处理器有下面不同之处 ...

  5. 【AngularJS】【02】AngularJS应用骨架

    ※文件引自OneDrive,有些人可能看不到

  6. AngularJs 基础(60分钟入门)

    AngularJS 是一个创建富客户端应用的JavaScript MVC框架.你仍然需要具有服务端后台,但大多数的用户交互逻辑将放到客户端上处理.它可以创建单页的应用程序,一个页面的应用仅仅需要HTM ...

  7. AngularJS 中文资料+工具+库+Demo 大搜集

    中文学习资料: 中文资料且成系统的就这么多,优酷上有个中文视频. http://www.cnblogs.com/lcllao/archive/2012/10/18/2728787.html   翻译的 ...

  8. 用AngularJS开发下一代Web应用 系列入门基础教程

    开篇介绍 AngularJS是什么东西?我觉得不用再描述了.可自行去充电一下.按照惯例,让我们先看看一个Hello World的开门简介吧. <!doctype html> <htm ...

  9. AngularJs 基础(60分钟入门) (转)

    AngularJs是一个不错的用于开发SPA应用(单页Web应用)的框架.单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.浏览器一开始会 ...

随机推荐

  1. HDU 4788 Hard Disk Drive (2013成都H,水题) 进位换算

    #include <stdio.h> #include <algorithm> #include <string.h> #include<cmath> ...

  2. hyperVisor

    当前主要的hyperVisors:VMware vSphere.微软Hyper-V.Citrix XenServer .IBM PowerVM.Red Hat Enterprise Virtuliza ...

  3. 使用GitHub管理源代码

    作为一个开发员,源码的管理是一个头等大事来的,想象一下,修改完成却发现文件丢失了,该怎么办?有了源代码管理工具,能够帮助我们查看某个代码文件的修改内存及历史修改记录. 作为.Net开发员,我使用过VS ...

  4. Mockito测试

    Mockito 一 mockito基本概念 Mock测试是单元测试的重要方法之一,而Mockito作为一个流行的Mock框架,简单易学,且有非常简洁的API,测试代码的可读性很高. Mock测试就是在 ...

  5. ASP.NET MVC- VIEW Creating Custom HTML Helpers Part 2

    The goal of this tutorial is to demonstrate how you can create custom HTML Helpers     that you can ...

  6. servlet和手动创建servlet,断点调试

    1.    什么是Servlet Servlet是一种用Java语言编写的Web应用组件 Servlet主要用于动态网页输出,扩展了Web服务器的功能 Servlet由Servlet容器进行管理 2. ...

  7. Flume NG中的Kafka Channel

    kafka(官网地址:http://kafka.apache.org)是一款分布式消息发布和订阅的系统 在Flume中的KafkaChannel支持Flume与Kafka整合,可以将Kafka当做ch ...

  8. 插入ts以及判断列是否存在(支持多数据库)

    1:增加ts.dr字段,先判断ts.dr字段是否存在,其中ts字段插入的是日期,默认值为当前插入的时间,dr字段是数值型,默认值为0 * 增加ts/dr字段 * * @param tableList ...

  9. 256MB小内存MySQL配置优化

    [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mys ...

  10. css制作导航栏的上下三角

    1)先完成一个导航条 <style type="text/css"> .nav-ul{ list-style: none; } .nav-ul li{ width: 1 ...