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 相关文章推荐
DEFER怎么用?
Jul 01 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
Nov 25 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
Angularjs 制作购物车功能实例代码
Sep 14 Javascript
AngularJs 动态加载模块和依赖
Sep 15 Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
Mar 17 Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 Javascript
浅谈Vue的响应式原理
May 30 Javascript
如何在现代JavaScript中编写异步任务
Jan 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
PHP分页显示制作详细讲解
2008/11/19 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
Prototype使用指南之range.js
2007/01/10 Javascript
Javascript----文件操作
2007/01/18 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
python3.4实现邮件发送功能
2018/05/28 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
Python测试模块doctest使用解析
2019/08/10 Python
python重要函数eval多种用法解析
2020/01/14 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
中间件的定义
2016/08/09 面试题
银行求职推荐信范文
2013/11/30 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
庆祝儿童节标语
2014/10/09 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
财务个人年度总结范文
2015/02/26 职场文书
研讨会通知
2015/04/27 职场文书
母亲去世追悼词
2015/06/23 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android