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 相关文章推荐
Prototype PeriodicalExecuter对象 学习
Jul 19 Javascript
JS 控制非法字符的输入代码
Dec 04 Javascript
Google AJAX 搜索 API实现代码
Nov 17 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
Aug 21 Javascript
javascript实现模拟时钟的方法
May 13 Javascript
js数组常见操作及数组与字符串相互转化实例详解
Nov 10 Javascript
基于JS实现省市联动效果代码分享
Jun 06 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
Aug 02 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
Jul 20 Javascript
JS数组转字符串实现方法解析
Sep 04 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 地区分类排序算法
2013/07/01 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
php 删除cookie方法详解
2014/12/01 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
完美实现bootstrap分页查询
2015/12/09 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
python异常触发及自定义异常类解析
2019/08/06 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
如何理解Python中的变量
2020/06/01 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
linux比较文件内容的命令是什么
2013/03/04 面试题
工作中个人的自我评价
2013/12/31 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
预备党员表决心书
2014/03/11 职场文书
北京申奥口号
2014/06/19 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
英语复习计划
2015/01/19 职场文书
文明倡议书
2015/01/19 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
好员工观后感
2015/06/17 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python