AngularJS 限定$scope的范围实例详解


Posted in Javascript onJune 23, 2017

限定$scope的范围

JavaScript基于原型的继承与面向对象中基于类的继承有着微妙的区别,这通常不是什么问题,但这个微妙之处在使用$scope时就会表现出来。在AngularJS中,每个$scope都会继承父$scope,最高层称之为$rootScope。($scope与传统指令有些不同,它们有一定的作用范围i,且只继承显式声明的属性。)

由于原型继承的特点,在父类和子类间共享数据不太重要,不过如果不小心的话,也很容易误用了一个父$scope的属性。

比如说,我们需要在一个导航栏上显示一个用户名,这个用户名是在登录表单中输入的,下面这种尝试应该是能工作的:

<div

ng-controller="navCtrl">

  <span>{{user}}</span>

  <div

ng-controller="loginCtrl">

    <span>{{user}}</span>

    <input

ng-model="user"></input>

  </div>

</div>

那么问题来了……:在text input中设置了user的ng-model,当用户在其中输入内容时,哪个模版会被更新?navCtrl还是loginCtrl,还是都会?

如果你选择了loginCtrl,那么你可能已经理解了原型继承是如何工作的了。

当你检索字面值时,原型链并不起作用。如果navCtrl也同时被更新的话,检索原型链是必须的;但如果值是一个对象,这就会发生。(记住,在javascript中,函数、数组和对象都是对象)

所以为了获得预期的行为,需要在navCtrl中创建一个对象,它可以被loginCtrl引用。

<div
 ng-controller="navCtrl">

  <span>{{user.name}}</span>

  <div
 ng-controller="loginCtrl">

    <span>{{user.name}}</span>

    <input
 ng-model="user.name"></input>

  </div>

</div>

现在,由于user是一个对象,原型链就会起作用,navCtrl模版和$scope和loginCtrl都会被更新。

这看上去是一个很做作的例子,但是当你使用某些指令去创建子$scope,如ngRepeat时,这个问题很容易就会产生。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
javascript中声明函数的方法及调用函数的返回值
Jul 22 Javascript
javascript实现点击后变换按钮显示文字的方法
May 13 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
Feb 01 Javascript
关于input全选反选恶心的异常情况
Jul 24 Javascript
js实现定时进度条完成后切换图片
Jan 04 Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 Javascript
在vue中获取token,并将token写进header的方法
Sep 26 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 #jQuery
js实现城市级联菜单的2种方法
Jun 23 #Javascript
JS使用正则表达式验证身份证号码
Jun 23 #Javascript
创建简单的node服务器实例(分享)
Jun 23 #Javascript
详解微信小程序 template添加绑定事件
Jun 23 #Javascript
微信小程序 检查接口状态实例详解
Jun 23 #Javascript
20行JS代码实现网页刮刮乐效果
Jun 23 #Javascript
You might like
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
JS 判断代码全收集
2009/04/28 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
python scipy卷积运算的实现方法
2019/09/16 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
编辑个人求职信范文
2013/09/21 职场文书
应届生人事助理求职信
2013/11/09 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
环境工程专业个人求职信
2013/12/05 职场文书
初中校园广播稿
2014/02/02 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
社区服务活动小结
2014/07/08 职场文书
英文演讲稿开场白
2014/08/25 职场文书
吴仁宝观后感
2015/06/09 职场文书
植物园观后感
2015/06/11 职场文书
2016年教师新年寄语
2015/08/18 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python
解决Redis启动警告问题
2022/02/24 Redis