什么是AngularJs?

  angularjs是一个为动态WEB应用设计的结构框架。它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚、简洁地构建你的应用组件。它的创新点在于,利用数据绑定依赖注入,它使你不用再写大量的代码了。这些全都通过浏览器端的javascript实现,这也使得它能够完美地和任何服务器技术结合。

  AngularJS简单的Helloworld例子:

<!DOCTYPE HTML>
<!-- 告诉AngularJs引擎从这里开始是ng-app管理 -->
<html lang="en-US" ng-app>
<head>
<meta charset="UTF-8">
<title>AngularJS例子</title>
</head>
<body>
<!-- ng-model数据模型 -->
<input type="text" ng-model='name' placeholder="yourname" />
<!-- {{}}angular表达式 -->
<h1>Hello {{name}}</h1>
<script type="text/javascript" src='http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js'></script>
</body>
</html>

这个例子其实展示了angularjs的数据双向绑定,

  左边为数据单向绑定图解,通常是要你管jquery,backbone这类框架,     右边为angularjs数据双向绑定。

  模型 视图 控制器(MVC)

  MVC背后的核心概念就是,你在你的代码之间明确分离管理数据(模型),应用程序逻辑(控制器),并将数据给用户(视图)。

  视图从模型中获取数据展示给用户。当用户通过点击或者输入和应用程序进行交互时,控制器通过改变模型中的数据响应。最终,模型层通知视图层,已经发生改变,一边更新显示。

  在Angluar应用中,视图层就是DOM,控制器就是Javascript类,模型数据存储在对象属性中。

  angularjs数据绑定

  像jquery库这种扩展到客户端的模式,让我们遵循相似的风格,但由于更新的能力,单独地DOM的部分,而不是更新整个页面。这里,我们合并HTML字符串和数据,然后通过元素上设置innerHTML将结构插入到我们想要的Dom中。

  这一切都运行的相当好,但是你想将新数据插入到界面,或者改变基于用户输入的数据时,你需要做很多又不是价值不高的工作,来确保同时在界面和javascript属性中获取的数据正常的状态。

  但是,倘若我们有什么东西把这些工作都为我们做好了,同时不需要写代码?倘若我能仅仅声明界面的某一部分映射到javascript的属性,让他们自动的同步?这种编程方式叫做数据绑定。我们在angular中包括这种功能,因为当编写视图和模型时,使用mvc来消除代码那是非常棒的。移动数据从一个地方的绝大部分自动发生。

注:最上面的例子就能体现

  依赖注入(DI)

  $scope对象把数据绑定自动的传递给了我们。我们没有必要通过调用任何函数来创建它。我们只是要求把它放到HelloController构造函数中。

  在后续学习中,我们发现,$scope并不是我们唯一需要的。如果我们需要数据绑定它到用户浏览器指定的URL地址中,我们需要在构造函数中,添加一个$location对象,就这样:

function HelloController($scope,$location){
$scope.greeting={text:'Hello'}
//使用$location 在这
}

  通过Angular的依赖注入系统,我们可以得到这种效果。依赖注入允许我们遵循一种开发风格,这种开发风格中,不是创建依赖,我们的类仅仅添加他们需要的。

  这个遵循了一个叫迪米特法则的设计模式,也被称作最少知识法则。由于HelloController的任务是建立greeting模型的初始值,这种模式就是说,它不需要担心像$scope如何创建以及在那里找到它。

  angularJs指令

  angular最优秀部分之一是你可以把你写的模板当成HTML。因为在框架的核心层,我们已经包括了一个强大的DOM转换引擎,可以让你扩展HTML语法,因此你才可以这样做。

  我们已经在模板文件中看到了多个新的属性,这些并不是HTML规范的一部分。示例中包括两个大括号是用来数据绑定的,ng-controller是用来指定那个控制器来服务那个师徒,ng-model将一个输入框绑定到模型部分。我们称这些叫HTML扩展指令

  angular带有很多标识符,帮助你为你的应用程序定义视图。这些标识符可以定义我们常见的视图作为模板。它们可以说明应用程序如何工作的或者创建可重复使用的组件。

  同时不局限于Angular自带的标识符。你可以写你自己的来扩展HTML模板,做任何你想做的事。

  angularjs的的模块管理参见如何组织大型JavaScript应用中的代码?.

AngularJS初始(一)的更多相关文章

  1. AngularJS初始用之 中间件 connect .static 静态文件不能找到

    学习心得,软件更新太快,学习不能照书本. 在学习搭建Nodejs服务器时,掉坑了啦,太坑了,对于什么都不知道的初学者,开门就是坑...,怎么坚持学下去... 还好,现在的世界很大,如果你发现自己不是犯 ...

  2. 初始AngularJS

    <!-- AngularJS 通过 ng-directives 扩展了 HTML. ng-app 指令定义一个 AngularJS 应用程序. ng-model 指令把元素值(比如输入域的值)绑 ...

  3. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

  4. AngularJS开发指南11:AngularJS的model,controller,view详解

    model model这个词在AngularJS中,既可以表示一个(比如,一个叫做phones的model,它的值是一个包含多个phone的数组)对象,也可以表示应用中的整个数据模型,这取决于我们所讨 ...

  5. (转)构建自己的AngularJS,第一部分:Scope和Digest

    原翻译链接:https://github.com/xufei/Make-Your-Own-AngularJS/edit/master/01.md 原文链接:http://teropa.info/blo ...

  6. angularJS实用的开发技巧

    一.开端 真的是忙完这一阵子就可以忙下一阵子了啊... 最近在做一个angularJS+Ionic的移动端项目...记录一些技巧,方便自己以后查阅,也方便需要的人可以看一看...^_^ 二.基础原则了 ...

  7. AngularJS 模块& 表单

    模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 应用("myApp") 带有控制器 ("myCtrl&qu ...

  8. AngularJS(1)

    AngularJS(1) 在讲正题之前,先说一下有关angular简介方面的信息: 1. angularJS  诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优 ...

  9. 基于AngularJS的个推前端云组件探秘

    基于AngularJS的个推前端云组件探秘 AngularJS是google设计和开发的一套前端开发框架,帮助开发人员简化前端开发的负担.AngularJS将帮助标准化的开发web应用结构并且提供了针 ...

随机推荐

  1. 4 云计算系列之Openstack简介与keystone安装

    preface KVM 是openstack虚拟化的基础, 再介绍了kvm虚拟化技术之后,我们介绍下openstack和如何搭建. Openstack组件 openstack架构图如下所示 那么我们就 ...

  2. jenkins 神奇变量

    Hudson自己设置的一些环境变量可用于通过Hudson来执行shell脚本.Windows批处理文件和Ant文件,他们包括 Hudson设置环境变量 当一个Hudson作业执行时,它会设置一些环境变 ...

  3. Java实现两个变量的互换(不借助第3个变量)

    创建一个类,在该类中定义两个变量并为其指定初始值,然后交换两个变量的值,要求不允许借助第三个变量,只能使用异或运行实现两个变量值的交换. import java.util.Scanner; publi ...

  4. Ulua_toLua_基本案例(六)_LuaCoroutine2

    Ulua_toLua_基本案例(六)_LuaCoroutine2 using UnityEngine; using System.Collections; using LuaInterface; pu ...

  5. eclipse中设置文件的编码格式为utf-8

    1.可以在 eclipse 中配置 workspace 项下 text file encoding 属性的值来决定此工作区间下所有的 eclipse 项目的文档的编码属性. Window-->P ...

  6. 有人在贴吧问phpmyadmin如何设置插入的时候默认插入1条记录

    在新版phpmyadmin中(我的版本是3.5.1) 插入的时候会提示插入两条,能够方便操作,让你多录入几条数据,如图 然而有人不想要这个界面默认插入两条,如何改为1条或者其他呢? 我审查了这个元素标 ...

  7. SpringBoot(九)-- SpringBoot JDBC

    1.属性配置文件(application.properties) # type 可以修改连接池类型,默认采用Tomcat的连接池 # spring.datasource.type=com.alibab ...

  8. FFMPEG转换WAV到MP3

    下载FFMPEG https://ffmpeg.zeranoe.com/builds/ Example to encode VBR MP3 audio with ffmpeg using the li ...

  9. Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2

    原因是解析的时候多了,逗号,或是 \ 解决方法:一 revJson=revJson.replace("\\", "");//去掉'/' revJson=revJ ...

  10. C语言中如何计算时间差

    #include <time.h>   #include <stdio.h>   int main()   {       time_t start ,end ;        ...