详解angular中的作用域及继承
发布时间 - 2026-01-11 01:34:48 点击率:次在一些使用angular框架的大型项目中,似乎有很多个controller,而每个controller都有自己的$scope.

1、$rootscope
$rootScope顶级作用域,也叫根作用域,类似于window,window的属性在任何子作用域都可以访问。$rootScope则是所有controller进行数据沟通的中间域,即在$rootScope中的数据,在每个controller中都能通过$rootScope.xxx获取到。
2、$scope
(1)作用
$scope 就在视图和控制器之间建立了一个桥梁,基于作用域视图在修改数据时会立刻更新 $scope,同样的 $scope 发生改变时也会立刻重新渲染视图.每个控制器controller对应一个$scope,通过为其属性赋值,可以传递数据给模板渲染.
(2)生命周期
创建:在创建控制器或指令时,AngularJS会用$injector创建一个新的作用域,并在这个新建的控制器或指令运行时将作用域传递进去。
链接:当Angular开始运行时,所有的$scope对象都会附加或者链接到视图中。所有创建$scope对象的函数也会将自身附加到视图中。这些作用域将会注册当Angular应用上下文中发生变化时需要运行的函数。这些函数被称为$watch函数,Angular通过这些函数获知何时启动事件循环。
更新:当事件循环运行时,它通常执行在顶层$scope对象上(被称作$rootScope),每个子作用域都执行自己的脏值检测。每个监控函数都会检查变化。如果检测到任意变化,$scope对象就会触发指定的回调函数。
销毁:当一个$scope在视图中不再需要时,这个作用域将会清理和销毁自己。尽管永远不会需要清理作用域(因为Angular会为你处理),但是知道是谁创建了这个作用域还是有用的,因为你可以使用这个$scope上叫做$destory()的方法来清理这个作用域。
3、原型继承
scope是AngularJS中的作用域(其实就是存储数据的地方),很类似JavaScript的原型链 。搜索的时候,优先找自己的scope,如果没有找到就沿着作用域链向上搜索,直至到达根作用域rootScope。
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body ng-app="myApp">
<div ng-controller="parentController">
{{name}}
<div ng-controller="sonController">
{{name}}
</div>
</body>
<script type="text/javascript" src="./angular.min.js"></script>
<script>
var parentController=function($scope){
$scope.name="parent";
}
var sonController=function($scope){
console.log($scope.name);//parent
}
parentController.$injector=["$scope"];
sonController.$injector=["$scope"];
angular.module("myApp",[])
.controller("parentController",parentController)
.controller("sonController",sonController)
</script>
</html>
首先子控制器在自己的作用域内查找name属性,没找到,向父控制器找。
补充一点,如何在子控制器中修改父控制器中$scope的值,可见如下:
$scope.$parent.name="son";在子控制器中$scope.$parent就表示父控制器中的$scope,然后修改其值即可。
4、$new
$scope.$new(isolated,parent);用于定义scope的child scope
1)参数:isolated,是否是隔离的。如果值是true,那么这个scope不会从父scope继承原型。作用域是独立的,在这里不能看见父scope的属性。如果值为false,则继承自父(可以访问父scope的所有成员),默认为false!
parent 用于指定创建的子scope的父scope,如果没有此参数,则父scope为调用当前$new方法的$scope
var myController=function($scope){
$scope.data="hello!"
var scope1=$scope.$new(false,$scope);
console.log(scope1.data); //hello! scope1继承了$scope,所以可以访问到data
var scope2=$scope.$new(true,$scope);
console.log(scope2.data);// undefined 第一个参数为true,表示是隔离的,无法继承,自己又没有,故为undefined
}
myController.$injector=["$scope"];
angular.module("myApp",[])
.controller("myController",myController)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angular
# 作用域
# scope
# angularjs
# AngularJs学习第五篇从Controller控制器谈谈$scope作用域
# 学习Angular中作用域需要注意的坑
# 浅谈angularJS 作用域
# 关于angularJs指令的Scope(作用域)介绍
# 详解AngularJS中的作用域
# 详解JavaScript的AngularJS框架中的作用域与数据绑定
# AngularJS入门教程之Scope(作用域)
# AngularJS 作用域详解及示例代码
# Angular.Js之Scope作用域的学习教程
# 自己的
# 器中
# 将会
# 如果没有
# 就会
# 都有
# 在这里
# 就在
# 也会
# 你可以
# 第一个
# 有很多
# 都能
# 则是
# 为你
# 并在
# 为其
# 被称为
# 会用
# 永远不会
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
简单实现jsp分页
浅析上传头像示例及其注意事项
如何将凡科建站内容保存为本地文件?
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel怎么实现验证码(Captcha)功能
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Laravel如何发送系统通知?(Notification渠道示例)
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Laravel如何创建自定义中间件?(Middleware代码示例)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
nginx修改上传文件大小限制的方法
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
制作企业网站建设方案,怎样建设一个公司网站?
Laravel如何使用Telescope进行调试?(安装和使用教程)
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
高防服务器租用指南:配置选择与快速部署攻略
香港服务器租用每月最低只需15元?
用yum安装MySQLdb模块的步骤方法
如何为不同团队 ID 动态生成多个独立按钮
Laravel怎么在Blade中安全地输出原始HTML内容
如何在宝塔面板创建新站点?
Laravel API资源类怎么用_Laravel API Resource数据转换
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
公司门户网站制作流程,华为官网怎么做?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Laravel Session怎么存储_Laravel Session驱动配置详解
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
,网页ppt怎么弄成自己的ppt?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何快速上传自定义模板至建站之星?
b2c电商网站制作流程,b2c水平综合的电商平台?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
青岛网站建设如何选择本地服务器?
如何挑选优质建站一级代理提升网站排名?
怎么用AI帮你为初创公司进行市场定位分析?
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何快速打造个性化非模板自助建站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
JS实现鼠标移上去显示图片或微信二维码
如何快速搭建FTP站点实现文件共享?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Python文件异常处理策略_健壮性说明【指导】
jQuery validate插件功能与用法详解

