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 相关文章推荐
jQuery ui插件的使用方法代码实例
May 08 Javascript
把jquery 的dialog和ztree结合实现步骤
Aug 02 Javascript
JS滚轮事件onmousewheel使用介绍
Nov 01 Javascript
给事件响应函数传参数的四种方式小结
Dec 05 Javascript
c#+jquery实现获取radio和checkbox的值
Sep 12 Javascript
动态加载js的方法汇总
Feb 13 Javascript
js实现滑动触屏事件监听的方法
May 05 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
Aug 24 jQuery
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
Vue基于iview table展示图片实现点击放大
Aug 05 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(三)
2012/03/22 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
js分页代码分享
2014/04/28 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
跟老齐学Python之正规地说一句话
2014/09/28 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python读取文本中的坐标方法
2018/10/14 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
python 实现音频叠加的示例
2020/10/29 Python
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
电工工作职责范本
2014/02/22 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
出生医学证明书
2014/09/15 职场文书
村党建工作汇报材料
2014/11/02 职场文书
2014年党支部工作总结
2014/11/13 职场文书
运动会表扬稿
2015/01/16 职场文书
史上最牛辞职信
2015/05/13 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
Nginx缓存设置案例详解
2021/09/15 Servers