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 相关文章推荐
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
JQuery onload、ready概念介绍及使用方法
Apr 27 Javascript
JS获取地址栏参数的小例子
Aug 23 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
Apr 06 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
Oct 16 Javascript
windows8.1+iis8.5下安装node.js开发环境
Dec 12 Javascript
JavaScript 匿名函数和闭包介绍
Apr 13 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
微信小程序用canvas画图并分享
Mar 09 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
PHP 一个比较完善的简单文件上传
2010/03/25 PHP
php 字符串函数收集
2010/03/29 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
js 提交和设置表单的值
2008/12/19 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
vue实例的选项总结
2020/06/09 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Python 切分数组实例解析
2019/11/07 Python
利用python 下载bilibili视频
2020/11/13 Python
申请任职学生会干部自荐书范文
2014/02/13 职场文书
公司活动总结范文
2014/07/01 职场文书
水浒传读书笔记
2015/06/25 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
中学校园广播稿
2015/08/18 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python