AngularJS基础概念

  1. 作用域、控制器、指令

作用域

应用的作用域是和应用的数据模型相关联的,同时作用域也是表达式执行的上下文。$scope对象是定义应用业务逻辑、控制器方法和视图属性的地方。

作用域是应用状态的基础。基于动态绑定,我们可以依赖视图在修改数据时立刻更新$scope,也可以依赖$scope在其发生变化时立刻重新渲染视图。

AngularJS将$scope设计成和DOM类似的结构,因此$scope可以进行嵌套,也就是说可以引用父级$scope中的属性。

作用域提供了监视数据模型变化的能力。它允许开发者使用其中的apply机制,将数据模型的变化在整个应用范围内进行通知。我们在作用域的上下文中定义和执行表达式,同时它也是将事件通知给另一个控制器和应用其他部分的中介。

将应用的业务逻辑都放在控制器中,而将相关的数据都放在控制器的作用域中,这是非常完美的架构。

àng-app同$rootScope绑定,$rootScope是所有$scope对象的最上层。

àscope对象就是普通的JavaScript对象,我们可以在其上随意修改或添加属性

àscope对象在AngularJS中充当数据模型,但与传统数据模型并不一样,它不负责处理和操作数据,它只是视图和HTML之间的桥梁,它是视图和控制器之间的胶水

àscope的所有属性都可以自动被视图访问到。

àAngularJS不会对不包含AngularJS特殊声明的元素进行任何处理

我们可以在AngularJS应用的模版中使用多种标记

????指令:将DOM元素增强为可复用的DOM组件的属性或元素

????值绑定:模板语法{{}}可以将表达式绑定到视图上

????过滤器:可以在视图中使用函数,用来进行格式化

????表单控件:用来检验用户输入的控件

作用域能做什么

????提供观察者以监视数据模型的变化

????可以将数据模型的变化通知给整个应用,甚至是系统外的组件

????可以进行嵌套,隔离业务功能和数据

????给表达式提供运算时所需的执行环境

作用域包含了渲染视图时所需的功能和数据,它是所有视图的唯一源头。可以将作用域理解成视图模型(view model)

指令和作用域

指令在AngularJS中被广泛使用,指令通常不会创建自己的$scope,但也有例外,比如ng-controller和ng-repeat指令会创建自己的子作用域并将它们附加到DOM元素上。

控制器

控制器的作用是增强视图。AngularJS的控制器是一个函数,用来向视图的作用域中添加额外的功能。我们用它来给作用域对象设置初始状态,并添加自定义行为。

var app = angular.module(‘app‘, []);

app.controller("firstController‘, function($scope) { $scope.message = ‘hello‘; });

使用依赖注入可以尽可能精简控制器。

AngularJS同其他JavaScript框架最主要的一个区别是,控制器并不适合用来执行DOM操作、格式化操作或数据操作,以及除存储数据模型之外的状态维护操作。它只是视图和$scope之间的桥梁。

设计良好的应用会将复杂的逻辑放到指令和服务中,通过使用指令和服务,我们可以将控制器重构成一个轻量且更易维护的形式。

表达式

{{expression}}将一个变量绑定到$scope上。

à所有表达式都在所属的作用域内部执行,并有访问本地$scope的权限

à如果表达式发生了TypeError和ReferenceError并不会抛出异常

à不允许使用任何流程控制功能(ifelse)

à可以接受过滤器和过滤器链

过滤器

过滤器用来格式化需要展示给用户的数据,AngularJS提供了内置过滤器,也提供饿了自定义过滤器的途径。

指令

自定义HTML元素和属性

指令本质上就是AngularJS扩展具有自定义功能的HTML元素的途径。

angular.module("myApp",[])

.directive("myDirective", function() {

return { restrict:‘E‘,template:‘<a href=http://baidu.com>Click me to go to baidu</a>‘}; });

通过AngularJS模块API中的.directive()方法,我们可以通过传入一个字符串和一个函数来注册一个新指令,其中字符串是这个指令的名字,函数应该返回一个对象。

directive()方法返回的对象中包含了用来定义和配置指令所需的方法和属性。

事实上,声明指令并不需要创建一个新的自定义元素。声明指令本质上是在HTML中通过元素、属性、类或注释来添加功能。

<my-directive></my-directive>

<div my-directive></div>

<div class="my-directive"></div>

<!—directive:my-directive-->

在指令的定义中,设置restrict,可以告诉AngularJS在编译HTML时用哪种声明格式来匹配指令定义。可以设置一个或多个格式。

Eà元素 Aà属性 Cà类 Mà注释

无论有多少种声明属性的方式,我们坚持使用属性的方式,因为它有比较好的跨浏览器兼容性:restrict:‘A‘

表达式

由于指令可以用属性的形式调用,那么给属性赋值也是可行的

<h1 ng-init="greeting=‘helloworld‘">The greeting is: {{greeting}}</h1>

用表达式来声明指令

几种合法的表达式声明

<my-directive="someExpression"></my-directive>

<div my-directive="someExpression"></div>

<div class="my-directive:someExpression"></div>

<!—directive: my-directive someExpression -->

向指令中传递数据

AngularJS并没有限制在指令的模板中硬编码字符串

如果不将URL和链接文本混在指令内部,可以为其他使用我们指令的人提供更好的体验。我们的目标是关注指令的公共接口,就像其他任何编程语言一样。

template:‘<a href="{{myUrl}}">{{myLinkText}}</a>‘

在HTML中可以这样使用指令

<div my-directive my-url="http://www.baidu.com" my-link-text="Click me to go to Google"></div>

在浏览器中运行,根据结果可以发现,标签中href和标签内部文本都没有设置成功。

有好几种途径可以设置指令内部作用域的值,最简单的办法就是使用由所属控制器提供的已经存在的作用域

尽管简单,共享状态会导致很多其他问题,如果控制器被移除,或者在控制器的作用域中也定义了一个叫做myUrl的属性,我们就被迫要修改代码,这是成本很高且让人沮丧的事情。

AngularJS允许通过创建新的子作用域或者隔离作用域来解决这个常见的问题。

修改后的指令,看起来是这样

angular.module("myApp", [])

.directive("myDirective", function() {

return {

restrict:‘A‘,

replace:true,

scope: {

myUrl: ‘@‘,

myLinkText:‘@‘

},

template:‘<a href="{{myUrl}}">‘ + ‘{{myLinkText}}</a>‘ }; });

//待续

时间: 2024-08-29 19:22:40

AngularJS基础概念的相关文章

AngularJS基础知识

AngularJS基础知识 --2015.06.28 1.     AngularJS是什么? Angular官网:https://angularjs.org/ ,API: http://docs.angularjs.org/api AngularJS是一个MV*(Model-View-Whatever, 不管是MVC或者MVVM,统称为MDV(Model Drive View))的JavaScript框架,是Google推出的SPA(single-page-application, 单页面应用

第214天:Angular 基础概念

一.Angular 简介 1. 什么是 AngularJS - 一款非常优秀的前端高级 JS 框架 - 最早由 Misko Hevery 等人创建 - 2009 年被 Google 公式收购,用于其多款产品 - 目前有一个全职的开发团队继续开发和维护这个库 - 有了这一类框架就可以轻松构建 SPA 应用程序 - 轻松构建 SPA(单一页面应用程序) - 单一页面应用程序: + 只有一个页面(整个应用的一个载体) + 内容全部是由AJAX方式呈现出啦的 - 其核心就是通过指令扩展了 HTML,通过

关系型数据库常用基础概念知识归纳

声明:我的文章都是只挑主要的写,次要细节太多,归纳就没意义了,同时归纳主要是给自己看的, 而且基本都是凭自己的一些记忆和理解即时写的.不一定对和全(但大多是一些需要理解的概念),请各位看管见谅! 数据库设计篇 1.范式 A.1范式,原子性,即列不可分 B.2范式,完全依赖,即有个主键唯一区分 C.3范式,不能传递依赖,即表中不能还有其他表的非主键信息 2.模型 A.概念模型,即ER图等 B.逻辑模型,即建逻辑表 C.物理模型,即生成物理表 事务 1.四大特性, A.原子,要么..要么.. B.隔

分布式学习——基础概念篇

概述 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和集中式处理正好是相反的的体系架构,集中传输集中到式处理顾名思义就是将所有的信息都一个统一的信息中心进行处理:分布式处理就是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机利用通信网络连接起来,让各个计算机各自承担同一个工作任务的不同部分,在控制中心的管理下,同时运行,共同完成同一个工作任务. 提到分布式处理就不能不提到

js基础--javascript基础概念之语法

掌握一门语言 必须先掌握它的语法! javascript 的语法和C.Java.Perl 的语法有些相似.但是比它们更加宽松. javascript 中的一切都是严格区分大小写的.例如变量: demo 和 Demo 两个变量是完全不同的. javascript 标示符,所谓标示符 是指 变量.函数.属性 的名字或函数的参数.标示符的格式是按照以下规则组合的一个或多个字符. 1.第一个字符必须是字母,下划线,或 $ 符号. 2.其他字符可以是字母.下划线.$ . 或数字. 注意 不能把关键字 保留

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =

js基础--javascript基础概念之数组

js基础--javascript基础概念之数组 在ECMAScript 中 ,数组是很常用的数据类型,js中的数组和其他很多语言的数组有明显的区别.js的数组可以保持任何类型的数值,一个数组中可以保存着多个不同类型的数值.js数组大小(长度)是可以调整的.可以随着数据的添加自动增长数组长度. 创建数组: 一.数组字面量 数组字面量由一对包含数组项的方括号[]表示. var array = [ 'kin', 'cheong', 'change', 'hello', 'haha', 'hi' ];

Linux基础概念-----环境变量

Shell 环境变量 Shell也是应用程序,工作与用户模式 变量类型 整形 浮点型 字符型 布尔型 bash变量类型 本地变量:仅对当前Shell有效 局部变量:仅对局部代码段有效(函数) 环境变量:expor VAR_NAME=Value,对当前Shell及子Shell有效 位置变量:$1;$2 .... 特殊变量:$?;$!;$$ .... 查看环境变量 printenv export 查看所有变量 set bash的引号 双引号:弱引用,可以实现变量替换: 单引号:强引用,不替换,而显示

Linux基础概念-----Linux I/O重定向 ,管道

标准输入:键盘 标准输出:显示器 错误输出:显示器 FD:文件描述符:让程序可以文件交互,并且便于内核识别文件,打开的每一个文件都有一个描述符 程序在和文件交互式,通过文件描述符来进行交互,而非文件名,文件名是方便用户分别文件. Linux一切皆文件,所以标准输入,标准输出都有各自的文件描述符 标准输入描述符:0 标准输出描述符:1 标准错误输出描述符:2 将其默认数据流改为其他设备:IO重定向 输出重定向 > 覆盖重定向 >> 追加重定向 /dev/null  黑洞 只针对当前Shel