$scope作用域与依赖注入
一、$scope与$rootscope作用域
$scope下的数据作为该控制器下的数据moduel,只有在该控制器下才能够访问;而$rootScope则可以可以再任何有效的地方访问到,这个有效的地方指的是ng-app声明之下的地方,也就是应用angularJS的地方。
以我的理解,就是把控制器加到哪个元素下面,相当于把其下的$scope下的元素带给了这个元素及其子孙,他们就可以访问这个控制器下$scope下的数据,其他控制器则不能。
1.$scope
$scope定义的是局部作用域,也就是只有在该控制器下才能够对其中的值进行访问。
- <!DOCTYPE html>
- <html ng-app>
- <head lang="en">
- <meta charset="UTF-8">
- <script src="angular.min.js"></script>
- <title></title>
- <script>
- function Aaa($scope){
- $scope.name='tong';
- }
- </script>
- </head>
- <body>
- <div ng-controller="Aaa">
- <p>{{name}}</p>
- </div>
- {{name}}
- </body>
- </html>
执行结果是只有第一个name显示了“tong",第二个压根没有显示;
2.$rootscope
$rootscope定义的是全局作用域,在其中定义的变量可以再任何有效的地方访问到,这个有效的地方指的是ng-app声明之下的地方,也就是应用angularJS的地方。
- <!DOCTYPE html>
- <html ng-app>
- <head lang="en">
- <meta charset="UTF-8">
- <script src="angular.min.js"></script>
- <title></title>
- <script>
- function Aaa($scope,$rootScope){
- $scope.name='tong';
- $rootScope.age=19;
- }
- </script>
- </head>
- <body>
- <div ng-controller="Aaa">
- <p>{{name}}</p>
- <p>{{age}}</p>
- </div>
- {{age}}
- </body>
- </html>
执行结果是:
tong
19
19
下面我把ng-app放到<div>中,执行结果如下:
tong
19
{{age}}
3.探究作用原理
其作用域原理很像JS中作用域的原理,若本作用域中有这个变量,则直接访问,若没有,则寻找上一层,依次类推。
- <!DOCTYPE html>
- <html ng-app>
- <head lang="en">
- <meta charset="UTF-8">
- <script src="angular.min.js"></script>
- <title></title>
- <script>
- function Aaa($scope,$rootScope){
- $scope.name='tong';
- $rootScope.age=19;
- }
- function Bbb($scope){
- $scope.name='feng';
- }
- </script>
- </head>
- <body>
- <div ng-controller="Aaa" >
- <p>{{name}}</p>
- <div ng-controller="Bbb">
- <p>{{name}}</p>
- <p>{{age}}</p>
- </div>
- </div>
- </body>
- </html>
执行结果如下:
tong
feng
19
19
二、依赖注入
我们先来看一个小例子。
- <script>
- function Aaa($scope,$rootScope) {
- alert(123);
- $scope.name = 'tong';
- }
- </script>
- </head>
- <body>
- <div ng-controller="Aaa" >
- <p>{{name}}</p>
- </div>
执行结果是弹出了123。这也就是说Aaa执行了一次,但是我们声明了形参$scope,$rootScope,我们并没有传入实参呀!这就是依赖注入,angularJS根据我们定义的实参,自动传入了angular.min.js文件中的$scope,$rootScope,使得函数通过依赖管理系统仅仅需要声明需要的协作对象,而不需要知道从哪里来。但是要注意的是我们一定要按照要求来写形参,让js文件知道它该传入什么参数。其中$scope,$rootScope,$timeout等等在angularJs中都叫做服务,也就是说每次定义函数时,我们只要知道需要什么服务,然后直接写入形参就可以。
随机推荐
- linux系统上查看硬件信息
一:查看CPU more /proc/cpuinfo | grep "model name" grep "model name" /proc/cpuinfo 如 ...
- 学生信息系统(json模块解决数据持久化)
将学生管理的案例,学生信息由原来的只有姓名,拓展为包含,姓名,年龄,两个属性:完成对应的增.删.查.改,操作 import json,os,time,sys student_list = [] Fil ...
- C#Encoding
1.Encoding (1).如何生成一个Encoding即一种编码 Encoding位于System.Text命名空间下,是一个抽象类,它的派生类如下图: 要实例化一个Encoding一共有以下两种 ...
- C语言/C++编程学习:不做C/C++工作也要学C/C++的原因!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- Android TextView 嵌套图片及其点击,TextView 部分文字点击,文字多颜色
1. TextView 中嵌套图片的方法 TextView textView... textView.setText("..."); textView.append(Html.fr ...
- C博客作业05—指针
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 理解了指针在代码中的使用方法,学会使用指针进行参数操作 学会了结构体的定义方式与结构体的使用 经过持续一个周 ...
- OpenStack环境中的NFV实践
原文链接:http://www.99cloud.net/html/2016/jiuzhouyuanchuang_1103/250.html 在开始实践之前我们首先需要了解一些NFV概念和术语. NFV ...
- css3 animation动画使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【timeisprecious】【JavaScript 】JavaScript RegExp \W 元字符
JavaScript>RegExp正则表达式> \W 元字符 1 .From Runnob JavaScript RegExp \W 元字符 定义和用法: \W 元字符用于查找非单词字符. ...
- jquery input 实时监听输入
$('input').bind('input propertychange', function() { alert('hello world') });