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 相关文章推荐
Array.prototype.slice 使用扩展
Jun 09 Javascript
一段批量给页面上的控件赋值js
Jun 19 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
Jun 03 Javascript
javascript几个易错点记录
Nov 26 Javascript
js 左右悬浮对联广告代码示例
Dec 12 Javascript
JavaScript实现彩虹文字效果的方法
Apr 16 Javascript
解析Javascript单例模式概念与实例
Dec 05 Javascript
Bootstrap输入框组件简单实现代码
Mar 06 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
js实现旋转木马轮播图效果
Jan 10 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创建PDF中文文档
2006/10/09 PHP
php横向重复区域显示二法
2008/09/25 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
vue配置多页面的实现方法
2018/05/22 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Python实现身份证号码解析
2015/09/01 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
Python语言进阶知识点总结
2019/05/28 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
聊城大学毕业生自荐书
2014/02/01 职场文书
精彩的广告词
2014/03/19 职场文书
儿童生日会策划方案
2014/05/15 职场文书
教师求职信范文
2014/05/24 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
团委副书记工作总结
2015/08/14 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书