首页 数据库 mysql教程 【AngularJS系列2】scope

【AngularJS系列2】scope

Jun 07, 2016 pm 03:48 PM
angularjs 系列

Scope是AngularJS里的一个很重要的概念,简单的说它就是用来保存AngularJS Model们的对象,是Model们温暖的小家~ 那这个小家是什么时候造的呢? 1 html ng-app = mainApp 2 / html 我们知道, ng-app 是一个应用启动AngularJS的入口点,在这里也会创建一个r

Scope是AngularJS里的一个很重要的概念,简单的说它就是用来保存AngularJS Model们的对象,是Model们温暖的小家~

那这个小家是什么时候造的呢?

<span>1</span> <span>html</span> <span>ng-app</span>=<span>"mainApp"</span>>
<span>2</span> <span><span>html</span>></span>
登录后复制

我们知道, ng-app 是一个应用启动AngularJS的入口点,在这里也会创建一个root scope,在controller里可以通过 $rootScope 调到,每个应用只能有一个root scope(当然了~root嘛~),但它会有多个child scope,那啥时候会创建child scope呢?

<span>1</span> <span>html</span> <span>ng-app</span>=<span>"mainApp"</span>>
<span>2</span>     <span>body</span> <span>ng-controller</span>=<span>"MainCtrl"</span>>
<span>3</span>         <span>div</span> <span>ng-controller</span>=<span>"SubCtrl"</span> <span>ng-include</span> <span>src</span>=<span>" 'template.html' "</span>>
<span>4</span>         <span><span>div</span>></span>
<span>5</span>         <span>ul</span>>
<span>6</span>             <span>li</span> <span>ng-repeat</span>=<span>"item in items"</span>>{{item.name}}<span><span>li</span>></span>
<span>7</span>         <span><span>ul</span>></span>
<span>8</span>     <span><span>body</span>></span>
<span>9</span> <span><span>html</span>></span>
登录后复制

在上面的例子里, ng-controller   ng-include   ng-repeat 都创建了新的child scope( ng-repeat 是对每一个重复的元素都创建了新的child scope),他们之间的父子关系是这样的:

【AngularJS系列2】scope

包含关系即是他们的父子关系,子scope是可以访问父scope上绑定的所有model和function的。

AngularJS会给scope对应的dom添加叫ng-scope的class,如果我们给自己的应用加这样一个css~

<span>1</span> <span><span>.ng-scope</span> </span><span>{<span><span><span>border</span></span></span><span>:<span><span> <span>2</span>px dotted red</span></span><span>;</span></span><span>}</span></span>
登录后复制

通过红色的虚线边框我们也可以看出来大概scope的范围,但注意,并不是所有的ng-scope都是新的scope,有些ng-scope类名对应的dom共享的是同一个scope。

细心的童鞋可能注意到, ng-controller="SubCtrl" 和 ng-include 放在同一个div上了,为啥 ng-controller="SubCtrl" 就是爸爸, ng-include 就是儿子呢?  
这个没啥特别的原因, ng-controller 在AngularJS底层代码里实现的比较靠前而已,与在div上标明的顺序无关,但是这时会发生一个问题:

假如在 ng-include 对应的 template.html 里有这样的代码:

template.html

<span>1</span> <span><span></span><span><span><span>input</span> </span><span><span>type</span></span><span>=<span>"text"</span></span><span> <span>ng-model</span></span><span>=<span>"lastName"</span></span> <span>></span></span></span>
登录后复制

我们会发现,在 ng-controller="SubCtrl" 这个controller里是取不到lastName 的值的。

原因是这样的~  
我们假设 ng-controller="SubCtrl" 对应的是 Scope A , ng-include 对应的是 Scope B ~

  1. ng-include 创建的 Scope B 是 ng-controller 创建的 Scope A 的子scope,所以在 template.html 里可以访问 Scope A 的model和function。
  2. 在 template.html 里用 ng-model 绑定的model,是存放在 Scope B 上的,Scope A 是拿不到的,即使model同名。

解决方案:

  • 直接对 Scope A 的model绑定成员对象,如 ng-model="user.lastName"
  • 或在 template.html 使用 ng-model 绑定model时,加上 $parent (取父scope),如: ng-model="$parent.lastName" ,这样info就绑定在 Scope A上了

比较推荐第一种方式,因为第一种抽象出了对象,比起第二种所有的model都直接绑在$scope上来,封装的更好~

这里是官方Scope介绍~

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

小米 15 系列全代号曝光:Dada、Haotian、Xuanyuan 小米 15 系列全代号曝光:Dada、Haotian、Xuanyuan Aug 22, 2024 pm 06:47 PM

小米15系列预计将于10月份正式发布,其全系列代号已在外媒MiCode代码库中曝光。其中,旗舰级小米15Ultra代号为"Xuanyuan"(意为"轩辕"),此名源自中国神话中的黄帝,象征着尊贵。小米15的代号为"Dada",而小米15Pro则以"Haotian"(意为"昊天")为名。小米15SPro内部代号为"dijun",暗指《山海经》创世神帝俊。小米15Ultra系列涵盖

华为 Mate 60 系列最佳入手时机,新增 AI 消除 + 影像升级,更可享秋日礼遇活动 华为 Mate 60 系列最佳入手时机,新增 AI 消除 + 影像升级,更可享秋日礼遇活动 Aug 29, 2024 pm 03:33 PM

自去年华为Mate60系列开售以来,我个人就一直将Mate60Pro作为主力机使用。在将近一年的时间里,华为Mate60Pro经过多次OTA升级,综合体验有了显着提升,给人一种常用常新的感觉。比如近期,华为Mate60系列就再度迎来了影像功能的重磅升级。首先是新增AI消除功能,可以智能消除路人、杂物并对空白部分进行自动补充;其次是主摄色准、长焦清晰度均有明显升级。考虑到现在是开学季,华为Mate60系列还推出了秋日礼遇活动:购机可享至高800元优惠,入手价低至4999元。常用常新的产品力加上超值

2022年最新5款的angularjs教程从入门到精通 2022年最新5款的angularjs教程从入门到精通 Jun 15, 2017 pm 05:50 PM

Javascript 是一个非常有个性的语言. 无论是从代码的组织, 还是代码的编程范式, 还是面向对象理论都独具一格. 而很早就在争论的Javascript 是不是面向对象语言这个问题, 显然已有答案. 但是, 即使 Javascript 叱咤风云二十年, 如果想要看懂 jQuery, Angularjs, 甚至是 React 等流行框架, 观看《黑马云课堂JavaScript 高级框架设计视频教程》就对了。

iPhone 15 和iPhone 15 Pro 怎么挑?九大差异一次过目 iPhone 15 和iPhone 15 Pro 怎么挑?九大差异一次过目 Sep 14, 2023 am 08:01 AM

iPhone15与iPhone15Pro在今日正式发表,不过Pro系列作为高端机型,除了价格更高以外,也有许多专属功能,消费者在购买前得先认清差异,才不会在买了iPhone15后,才发现有些功能只有Pro系列才能用。显示器尽管搭载了相同的显示面板,但ProMotion自动适应更新频率技术与永远显示功能仍然是Pro系列专属。其余无论是在解析度、对比度、峰值亮度等层面,iPhone15与iPhone15Pro系列皆相同。动作按钮动作按钮目前是iPhone15Pro系列的专属设计,可以让使用者个人化自

使用PHP和AngularJS搭建一个响应式网站,提供优质的用户体验 使用PHP和AngularJS搭建一个响应式网站,提供优质的用户体验 Jun 27, 2023 pm 07:37 PM

在如今信息时代,网站已经成为人们获取信息和交流的重要工具。一个响应式的网站能够适应各种设备,为用户提供优质的体验,成为了现代网站开发的热点。本篇文章将介绍如何使用PHP和AngularJS搭建一个响应式网站,从而提供优质的用户体验。PHP介绍PHP是一种开源的服务器端编程语言,非常适用于Web开发。PHP具有很多优点,如易于学习、跨平台、丰富的工具库、开发效

使用PHP和AngularJS构建Web应用 使用PHP和AngularJS构建Web应用 May 27, 2023 pm 08:10 PM

随着互联网的不断发展,Web应用已成为企业信息化建设的重要组成部分,也是现代化工作的必要手段。为了使Web应用能够便于开发、维护和扩展,开发人员需要选择适合自己开发需求的技术框架和编程语言。PHP和AngularJS是两种非常流行的Web开发技术,它们分别是服务器端和客户端的解决方案,通过结合使用可以大大提高Web应用的开发效率和使用体验。PHP的优势PHP

名人堂内存有哪几个系列 名人堂内存有哪几个系列 Feb 04, 2024 am 09:18 AM

很多想入手内存条的用户都想知道,影驰名人堂这个品牌的内存条,有哪几个系列,想要了解一下,其实这个品牌目前有三个系列,分别是HOFEXTREME限量版,HOFEXTREME,HOFPRORGB。名人堂内存有哪几个系列:答:HOFEXTREME限量版,HOFEXTREME,HOFPRORGB。这三款内存条都是性能比较好的,其中HOFEXTREME限量版是性能最好的,HOFPRORGB相对前面的两款,稍微弱一些但性能也很不错。名人堂内存拓展介绍:1、采用三星B-die颗粒,是内存颗粒中的王者,使用寿命

使用Flask和AngularJS构建单页Web应用程序 使用Flask和AngularJS构建单页Web应用程序 Jun 17, 2023 am 08:49 AM

随着Web技术的飞速发展,单页Web应用程序(SinglePageApplication,SPA)已经成为一种越来越流行的Web应用程序模型。相比于传统的多页Web应用程序,SPA的最大优势在于用户感受更加流畅,同时服务器端的计算压力也大幅减少。在本文中,我们将介绍如何使用Flask和AngularJS构建一个简单的SPA。Flask是一款轻量级的Py

See all articles