Angularjs总结 二

# Angularjs总结 二 #

----------

**控制器的含义:**

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

当在页面上创建一个新的控制器时, AngularJS会生成并传递一个新的$scope给这个控制器。可以在这个控制器里初始化$scope。由于AngularJS会负责处理控制器的实例化过程,所以只需编写控制函数即可。

function myController($scope) {
$scope.say = "hello";
}

----------

上边创建的控制器是在全局创建的,这样并不是很合理污染了全局命名空间,更合理的做法是创建一个模块,并在模块中去创建一个控制器

**注意点1:使用ng-controller指令可以将一个控制器对象附加到DOM元素上,**

**注意点2,当创建了模块之后ng-app不需要放到全局上面去,而是放在了需要的地方**

div ng-app="myApp"><h1 ng-controller="myController">{{say}}</h1></div>
<script type="text/javascript">
var app = angular.module(‘myApp‘, []);
app.controller("myController",function($scope){
$scope.say="hello world";
});
</script>

----------

只需创建控制器作用域中的函数,就能创建可以在视图中使用的自定义操作。AngularJS允许我们在视图中像调用普通数据一样调用$scope上的函数。

内置指令ng-click
可以将按钮、链接等其他任何DOM元素同点击事件进行绑定
ng-click指令将浏览器中的mouseup事件,同设置在DOM元素上的事件处理程序绑定在一起

<div ng-app="myApp">
<div ng-controller="FirstController">
<h4>点击button按钮添加值,点击a标签减少值</h4>
<button ng-click="add(1)" class="button">Add</button>
<a ng-click="subtract(1)" class="button alert">Subtract</a>
<h4>Current count: {{ counter }}</h4>
</div>
</div>
<script type="text/javascript">
var app = angular.module(‘myApp‘, []);
app.controller(‘FirstController‘, function($scope) {
$scope.counter = 0;
$scope.add = function(amount) { $scope.counter += amount; };
$scope.subtract = function(amount) { $scope.counter -= amount; };
});
</script>

**注意点,他们用的是同一个scope**

----------

制器可以将与一个独立视图相关的业务逻辑封装在一个独立的容器中。尽可能地精简控制器是很好的做法。作为AngularJS开发者,使用依赖注入来访问服务可以实现这个目的。

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

AngularJS允许在$scope上设置包括对象在内的任何类型的数据,并且在视图中还可以展示对象的属性。

<div ng-app="myApp">
<div ng-controller="myController">
<p>{{people.name}}</p>
</div>
</div>
<script type="text/javascript">
angular.module(‘myApp‘, []).controller("myController",function($scope){ //注意这是简写形式
$scope.people={
name:"zhangsan"
};
});
</script>

----------

在拥有ng-controller=‘MyController‘ 这个属性的元素内部的任何子元素中,都可以访问person对象, 因为 它是定义在$scope上的。

$scope对象用来从数据模型向视图传递信息。同时,它也可以用来设置事件监听器,同应用的其他部分进行交互,以及创建与应用相关的特定业务逻辑。

AngularJS通过作用域将视图、控制器和指令隔离开来,这样就很容易为功能的具体部分编写测试。

**重点:控制器嵌套(作用域包含作用域)**

AngularJS应用的任何一个部分,都有父级作用域存在。对于ng-app所处的层级来讲,它的父级作用域就是$rootScope。
所有的作用域都通过原型继承而来,也就是说它们都可以访问父级作用域

AngularJS在当前作用域中无法找到某个属性时,便会在父级作用域中进行查找。

<div ng-app="myApp">
<div ng-controller="parController">
<div ng-controller="chiController">
<h1 ng-click="say()">say hello</h1>
{{people}}
</div>
</div>
</div>
<script type="text/javascript">
var app=angular.module("myApp",[])
app.controller("parController",function($scope){
$scope.people={gender:"male"}
})
app.controller("chiController",function($scope){
$scope.say=function(){
$scope.people.name="zhangsan"
}
})
</script>

----------

**表达式:**

表达式在AngularJS应用中被广泛使用,因此深入理解AngularJS如何使用并运算表达式是非常重要的。
{{}}——这就是一个基础的表达式
它的用法是使用{{}}将一个变量绑定到了$scope对象上边,然后在视图中取出来使用当用$watch进行监听时, AngularJS会对表达式或函数进行运算。
这里涉及到一个新的是知识点:$watch——根据名字就知道他是做什么用的:监视——在这里它的作用是对模型中的数据进行监视,并且当数据发生改变的时候做相应的响应

AngularJS提供了一个非常方便的$watch方法,它可以在每个scope中监视其中的变量

*案例:*

<div ng-app="watch" >
<input ng-model=‘name‘ type=‘text‘/>
<div>change count: {{count}}</div>
</div>
<script>
angular.module(‘watch‘,[])
.run([‘$rootScope‘,function($scope){ //run这个东西先不用管,后边会解释
$scope.count = 0;
$scope.name = ‘Alfred‘;
$scope.$watch(‘name‘,function(){
$scope.count++;
})
}]);
</script>

----------

$watch来对$scope中的name进行监视,并在它发生变化的时候将$scope中的count属性增加1。因此,每当对name进行一次修改时,下面显示的change count数字就会增加1。

其实表达式和eval() 非常相似,但是由于表达式由 AngularJS来处理

----------

有几点不同点:
1. 所有的表达式都在其所属的作用域内部执行,并有访问本地$scope的权限;

2. 不允许使用任何流程控制功能(条件控制,例如if/eles);

$parse可以将一个表达式转换为一个函数。这个函数可以被调用,其中的参数是一个上下文对象,通常来说是作用域。

*案例:*

<div ng-app="myApp">
<div ng-controller="myController">
<p>{{val}}</p>
</div>
</div>
<script type="text/javascript">
var app=angular.module("myApp",[])
app.controller("myController",function($scope,$parse){
$scope.name="zhangsan";
var expr="name ==‘wangwu‘"
var fun=$parse(expr);
$scope.val=fun();
})
</script>

时间: 2024-11-03 22:30:21

Angularjs总结 二的相关文章

AngularJS进阶(二十九)AngularJS项目开发技巧之localStorage存储

AngularJS项目开发技巧之localStorage存储 绪 项目开发完毕,测试阶段发现后台管理端二维码生成有问题,问题在于localStorage的存储.如下图左所示,二维码生成完毕包含信息如下图左所示,实际二维码信息如下图右所示: 经过测试发现二维码实际存储的是上一次的结果.好熟悉~Bingo,自己做导航栏高亮时就遇到过这个问题,当时就是使用的localStorage.问题还是出在localStorage身上.但是存储时:localStorage.setItem(key,value),如

angularJS 服务二

$http服务 一 介绍 AngularJS为我们提供了很多种服务,$http用于发送http请求,动态的请求数据.我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 二 使用 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的配置内容.这个函数返回一个promise对象,具有success和error两个方法. 返回一个promise对象: var promise=

angularjs(二)模板终常用的指令的使用方法

通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板开始入手是个不错方式,因为这部分内容相对简单好理解,而且是视图层的东西,大家都喜欢可以立马看得见的东西嘛.本篇我将搜罗模板中的常用指令一一测试,了解其使用方法,有点像背单词的感觉,会比较枯燥.不过对于初学,这样的枯燥是必须要经历的,开始~ 一.模板中可使用的东西及表达式 模板中可以使用的东西包括以下

angularjs笔记二

9.ng-repeat ng-repeat 指令用在一个对象数组上 比如: <div ng-app="" ng-init="names=[{name:'Jani',country:'Norway'}, {name:'Hege',country:'Sweden'},{name:'Kai',country:'Denmark'}]"> <p>循环对象:</p> <ul> <li ng-repeat="x in

angularJS 指令二

指令详解1.用directive()方法来定义指令.directive('myDirective',function($timeout,userDefinedService){ return {};});该方法接受两个参数:name(字符串):指令的名字,用来在视图中引用特定的指令factory_function(函数):该函数返回一个对象,其中定义了指令的全部行为当AngularJS启动应用时,会把第一个参数当做一个字符串,并以此字符串为名来来注册第二个参数返回的对象.也可以返回一个函数代替对

AngularJS 讲解,二 模块

AngularJS允许我们使用angular.module()方法来声明模块,这个方法能够接受两个参数,第一个是模块的名称,第二个是依赖列表,也就是可以被注入到模块中的对象列表. angular.module('myApp', []);//声明模块(这个方法相当于AngularJS模块的setter方法,是用来定义模块的.) 1)第一个参数:name是模块的名称,字符串变量. 2)第二个参数:  requires包含了一个字符串变量组成的列表,每个元素都是一个模块名称,本模块依赖于这些模块,依赖

AngularJS(二)

AngularJS 服务(Service)AngularJS 中你可以创建自己的服务,或使用内建服务. 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用.AngularJS 内建了30 多个服务.有个 $location 服务,它可以返回当前页面的 URL 地址. 1 var app = angular.module('myApp', []); 2 app.controller('customersCtrl', function($scope, $loc

AngularJs之二

今天先讲一个angularJs的表单绑定实例: <div ng-app="myApp" ng-controller="formCtrl"> <form novalidate> 姓:<input type="text" ng-model="user.xing"><br> 名:<input type="text" ng-model="user.mi

AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验最好,更像原生app.简单来说,单页面App不需要频繁切换网页,可以局部刷新,整个加载流畅度会好很多. 废话就不多说了,直接到正题吧,浅谈一下我自己理解的几种单页面架构: 1.requirejs+angular+angular-route(+zepto) 最后这个zepto可有可无