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脚本复制网页上的一个表格的不错实现方法
Dec 29 Javascript
JavaScript confirm选择判断
Oct 18 Javascript
超链接的禁用属性Disabled使用示例
Jul 31 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 Javascript
Angular开发者指南之入门介绍
Mar 05 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
Oct 26 Javascript
vue中组件的过渡动画及实现代码
Nov 21 Javascript
详解如何提升JSON.stringify()的性能
Jun 12 Javascript
vuex实现数据状态持久化
Nov 11 Javascript
小程序双头slider选择器的实现示例
Mar 31 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 字符串长度判断效率更高的方法
2014/03/02 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
浅析vue深复制
2018/01/29 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python进行两个表格对比的方法
2018/06/27 Python
python将list转为matrix的方法
2018/12/12 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
梅西百货官网:Macy’s
2020/08/04 全球购物
UNIX文件类型
2013/08/29 面试题
四年的个人工作自我评价
2013/12/10 职场文书
法务专员岗位职责
2014/01/02 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
《藏戏》教学反思
2014/02/11 职场文书
小学语文国培感言
2014/03/04 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
学习党章心得体会2016
2016/01/15 职场文书
求职信如何撰写?
2019/05/22 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Windows server 2012搭建FTP服务器
2022/04/29 Servers
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python