AngularJs 隔离作用域

初学NG,有诸多的不解,今天看了一篇文章,原文地址:https://segmentfault.com/a/1190000002773689#articleHeader0 ,本文运行的代码也出处此。

里面讲到了自定义指令的scope参数的值有三种,true,false,{}。我按照例子将scope的值运行试验了一把,利用Chrome插件batarang分析了一波,谈谈自己的理解,有不到的地方望各位海涵。

首先,隔离作用域与继承作用域(子作用域)是不同的,隔离作用域同当前DOM的作用域是完全隔离开的。NG中的$scope是Scope类的实例,是模板的域模型,每个Scope都对应着一个域模型,我这样理解也就是NG根据DOM树和其NG指令来驱动生成一个层级作用域(这也是一个树结构)。

  一直很疑惑隔离作用域与继承作用域的关系?。directive()方法返回这样一个对象,用来定义和配置指令所需的方法和属性,来控制如何渲染HTML模板,隔离作用域对象(scope)作为其中的一个属性返回,这对象只在指令的方法中或者指令的模板字符串中使用。

  当指令的scope属性为false:

  

   由上图可知,当scope为false,AngularJs并不会该指令生成的DOM节点生成新的Angular子作用域($scope),而是与父作用域共享,因此在模板中引用的模型也就是MyController父作用域中(当前作用域)的模型。

  当指令的scope属性为true:

  当初始化后,AngularJs为该指令创建新的子级作用域,其父作用域为MyController所在的作用域,当前的作用域(新建的子级作用域)模型为空,因此模板引用name,age模型会在父作用域进行搜索(沿着原型链进行向上)。然而当在当前作用域进行赋值(写)操作的时候就会在当前作用域创建新的模型(变量)。在input组件中输入的时候,就是做了这样的工作,name="白守敬",因此会在指令所在的当前作用域下会新增了name模型,而不是覆写了父作用域,类似于JavaScript的原型继承。

  当指令的scope属性为{}:

  

AngularJs也会该指令创建新的子级作用域,与情形二的区别在于其所在的作用域保存一份对父级作用域某些模型的或者DOM属性值的副本,scope在其中就扮演着这样的角色,@ 是将本地作用域同 DOM 属性的值进行绑定,= 将本地作用域同父级作用域上的属性进行绑定。因此在当前作用域,input组件对name模型赋值操作相当于修改了当前作用域name模型的值,对name,age模型的修改不会影响到父级作用域。

  总结一下,首先会AngularJs会为其指令创建新的子级作用域,隔离作用域大概是扮演着这样的角色,隔离作用域scope会为子级(所在当前)作用域传递关键字参数。

时间: 2024-08-02 03:41:49

AngularJs 隔离作用域的相关文章

AngularJS Scope(作用域)

1. AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Scope 可应用在视图和控制器上. 2. 使用Scope:在 AngularJS 创建控制器时,你可以将 $Scope 对象当作一个参数传递 <!DOCTYPE html> <html> <head> <meta charset="UTF-8">

angularJs的作用域和依赖注入

一.angularJs的作用域 <!DOCTYPE HTML> <html ng-app> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>angular概述</title> <script src="angular.min.js"></scr

AngularJS的作用域Scope

1.简介 angularjs启动并生成视图时,会根据ng-app元素和$RootScope进行绑定.$RootScope是所有$scope对象的最上层,是angularjs中最接近于全局作用域的对象. $scope对象就是一个普通的javascript对象,在angularjs中充当数据模型,但与传统的数据模型又不一样,$scope并不负责处理和数据操作,它只是视图和HTML之间的桥梁. $scope的所有属性都可以自动被视图访问到. 作用域是构成AngularJS应用的核心,它与应用的数据模型

AngularJS笔记---作用域和控制器

什么是作用域. 什么是控制器, 作用域包含了渲染视图时所需的功能和数据,它是所有视图的唯一源头.可以将作用域理解成试图模型(ViewModel). 作用域之间可以是包含关系也可以是独立关系.可以通过设置不同的ng-Controller来让$scope处于不同的作用域下面.  一.$rootScope 1.1 $rootScope可以理解成全局变量,一旦赋值对整个module都有效.$rootScpoe不依赖于任何一个controller,  app.run是module被加载时候执行的代码. 可

AngularJS&ndash;Scope(作用域)

Scope Scope 是一个应用程序的模块的对象.它是表达式的执行上下文.它充斥在DOM树的各个层级上.作用域Scope可以监控表达式也可以广播事件(监控表达式,就是WPF中的属性变更通知,相当有作用哟!).     Scope的特点 Scope有一个监控方法($watch),用它来监视model(模型)的变化,也就是上面所说的监视并做变更通知. Scope有一个($apply)方法,我们用它就可以去执行一些来自非Angular的代码,或者第三方内库功能.它的好处就是让第三方函数加入了Angu

AngularJS之作用域及控制器(一)

前言 之前有接触过基本的AngularJS,未过多涉及,于是乎本系列我们来着重讲讲AngularJS,对AngularJS中重要的几大内容进行梳理并进行一些小的例子的书写.在之前项目过程中用到过avalon,但是avalon并未被广泛使用也就放弃了,至于孰最轻量,性能更好作为非专业的我就不妄下结论,lz只明白一点,业界最流行什么前端框架,招聘大部分要求会哪些框架,lz才会去学习,当然其中的乐趣也是油然而生,每一次敲代码的过程好似在浩瀚大海中探幽一番,别有一番滋味. 简短介绍 AngularJS也

AngularJS 双向作用域

双向数据绑定 1.AngularJS => DOM 1 <!doctype html> 2 <html ng-app="myApp"> 3 <head> 4 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.3/angular.js"></script> 5 </head> 6 <body>

AngularJS讲义 - 作用域

什么是作用域? Angular中作用域(scope)是模板以及工作的上下文环境,作用域中存放了应用模型和视图相关的回调行为.作用域是层次化结构的与相关联的DOM结构相对应.作用域可以观察表达式以及传播事件.   原文: scope is an object that refers to the application model. It is an execution context for expressions. Scopes are arranged in hierarchical str

AngularJS scope 作用域的问题

这两天写的项目用到一个古老的前端框架AngularJS, 然后遇到了一个神奇的问题,对于我这种前端小白来说,也是花了大半天才解决.还是记录一下吧. 问题背景:AngularJS模型提供一个$scope变量,可以用来实现数据的双向绑定. 问题描述: 在使用了JQuery提供的fileupload文件上传框架后,想在文件成功上传后的回调函数done中改变scope变量的值,但是发现直接修改并没有成功.断点调试的时候发现在回调函数里 又确实是可以访问到,这就很神奇了. 原理和解决方法:Angular为