详解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插件功能与用法详解