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 jQuery中的DOM操作
Mar 21 Javascript
根据一段代码浅谈Javascript闭包
Dec 14 Javascript
js 采用delete实现继承示例代码
May 20 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
JS中对象与字符串的互相转换详解
May 20 Javascript
jQuery简单验证上传文件大小及类型的方法
Jun 02 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
Oct 15 Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
Oct 08 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 Javascript
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
jQuery DOM操作小结与实例
2010/01/07 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
编写Python的web框架中的Model的教程
2015/04/29 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
Python中进程和线程的区别详解
2017/10/29 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
python要安装在哪个盘
2020/06/15 Python
公司JAVA开发面试题
2015/04/02 面试题
函授本科毕业生自我鉴定
2013/10/16 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
硕士学位论文评语
2014/12/31 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
如何写新闻稿
2015/07/18 职场文书
大学班长竞选稿
2015/11/20 职场文书