angularjs应用骨架
使用典型的类库时,你可以选择并使用你所喜欢的功能;而对于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应用骨架的更多相关文章
- angularjs应用骨架(2)
时隔一个星期,接着上一篇的angularjs应用骨架继续聊聊angularjs其他的其他的内容. 区分UI和控制器的职责 在应用控制器中有三种职责: 1.为应用中模型设置初始状态 2.通过$scope ...
- angularjs应用骨架(3)
好,继续上一章节我们继续聊聊angularjs骨架.开发任何一款优秀的应用都会面临一项非常困难的工作,那就是找到一种合适的方式方法把代码组织在合适的功能范围内.我们已经看过控制器的处理方式,它会提供一 ...
- angularjs应用骨架(4)
继续上一篇 继续了解angular其他内容. 与服务器交互 真正的应用需要和真实的服务器进行交互移动应用和新兴的Chrome桌面应用可能是例外.但是对于此外的所有应用来说,无论是想把数据持久化到云端还 ...
- 用angularjs开发下一代web应用(二):angularjs应用骨架(二)
1.浅谈非入侵式JavaScript <div ng-click="doSomething()">...</div>这些指令和原来的事件处理器有下面不同之处 ...
- 【AngularJS】【02】AngularJS应用骨架
※文件引自OneDrive,有些人可能看不到
- AngularJs 基础(60分钟入门)
AngularJS 是一个创建富客户端应用的JavaScript MVC框架.你仍然需要具有服务端后台,但大多数的用户交互逻辑将放到客户端上处理.它可以创建单页的应用程序,一个页面的应用仅仅需要HTM ...
- AngularJS 中文资料+工具+库+Demo 大搜集
中文学习资料: 中文资料且成系统的就这么多,优酷上有个中文视频. http://www.cnblogs.com/lcllao/archive/2012/10/18/2728787.html 翻译的 ...
- 用AngularJS开发下一代Web应用 系列入门基础教程
开篇介绍 AngularJS是什么东西?我觉得不用再描述了.可自行去充电一下.按照惯例,让我们先看看一个Hello World的开门简介吧. <!doctype html> <htm ...
- AngularJs 基础(60分钟入门) (转)
AngularJs是一个不错的用于开发SPA应用(单页Web应用)的框架.单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.浏览器一开始会 ...
随机推荐
- bzoj 1493: [NOI2007]项链工厂(线段树)
1493: [NOI2007]项链工厂 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1256 Solved: 545[Submit][Status] ...
- makefile 进阶
一步一步写一个简单通用的makefile(一) 一步一步写一个简单通用的makefile(二) 一步一步写一个简单通用的makefile(三) 一步一步写一个简单通用的makefile(四)
- 神经网络中误差反向传播(back propagation)算法的工作原理
注意:版权所有,转载需注明出处. 神经网络,从大学时候就知道,后面上课的时候老师也讲过,但是感觉从来没有真正掌握,总是似是而非,比较模糊,好像懂,其实并不懂. 在开始推导之前,需要先做一些准备工作,推 ...
- Test2014-3-1 魅力值比较
魅力值比较 [问题描述] 大学生恋爱的问题造成了数量众多的异地恋,有许多J大的女生早早被Q大男生追走,这导致了J大男生的强烈不满.就在吐血高调地向一位J大美女展开攻势的之后,J大男生终于爆发了. 为了 ...
- Tornado源码探寻(准备阶段)
上一篇从一个简单的例子大致了解到Tornado框架的一个概述,同时也看清了web框架的本质. 接下来,我们从tornado程序的起始来分析其源码: 一.概述 上图是摘自朋友的博客里的内容,这张图很明确 ...
- Collections.sort的两种用法 转
/** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; impor ...
- php-mysql结果集函数比较
本节主要介绍了获取查询结果集的4个函数,此处对它们进行综合比较. ● mysql_result():优点在于使用方便:而缺点在于功能少,一次调用只能获取结果数据集中的一行记录,对较大型的数据库 ...
- 自己封装的C#操作redis公共类
关于C#操作redis公共类,网上有很多版本,每个版本我都看了,发觉还是不够完美,都存在一个问题,只能操作单一的缓存数据库 redis指令支持上,这里可以自己去扩展,下面分享下我近期封装的一个redi ...
- Kerberos验证过程
参考文献: How the Kerberos Version 5 Authentication Protocol Works: Logon and Authentication SQL Kerbero ...
- iOS上文本绘制的几种方法
文本绘制在开发客户端程序中是一个比较常用的功能,可分为采用控件和直接绘制两种方式. 采用控件的方式比较简便,添加一个比如UILabel对象,然后设置相关属性就好了.但这种方式局限性也比较大. 直接绘制 ...