浅谈AngularJs指令之scope属性详解


Posted in Javascript onOctober 24, 2016

AngularJS使用directive()方法类定义一个指令:

.directive("name",function(){
  return{
    
  };
})

上面是定义一个指令的主体框架,该方法接受两个参数:

1、第一个参数:name表示定义的指令的名称(angularjs会用这个name注册这个指令)

2、第二个参数:函数,该番薯必须返回一个对象或者一个函数,但通常我们会返回一个对象。return后接的就是返回的对象。

在返回的对象中有一个scope属性,这个属性用来修饰指令的作用域。

每次在注册一个指令的时候,这个指令都会考虑一个问题,我们用我自己所在作用域呢,还是创建一个从父作用域继承的子作用域呢,

还是创建一个隔离的作用域呢(不依赖外部的作用域);

scope属性的值为false,true,{ } 分别对应着上面的所在作用域,子作用域,隔离作用域。

我们举三个例子让我们彻底明白这几个属性的用法。

1、scope:false

html代码:

<div ng-controller="myController">
  <div>
    <span>我的名字是</span><span ng-bind="name"></span><br/>
    <span>我的年龄是</span><span ng-bind="age"></span>
    <div my-directive></div>
  </div>
</div>
<script>
  angular.module("app",[])
    .controller("myController",function($scope){
      $scope.name = "kobe";
      $scope.age = 39;
    })
    .directive("myDirective",function(){
      return{
        scope:false,
        restrict:"A",
        template:"<div><h1>下面的部分是我们创建指令时生成的</h1>"+
            "我的名字是:<span ng-bind='name'></span><br/>"+
            "我的年龄是:<span ng-bind='age'></span><br/>"+
            "输入你的新名字:<input type='text' ng-model='name'>"+
            "</div>"
      };
    })
</script>

效果:

这时,指令的作用域是和myController的作用域是相同的,因此当我们在输入框中输入新的名字时,上下两处的名字都会跟着变动,如下图所示:

2、scope:true

这时刚进入页面的效果,当我们在输入框输入新的名字时,就会发生和第一个实验不一样的效果,如图所示:

这里,上部分的名字没有发生改变,而下面的名字发生了改变。

这个实验中,有两点需要我们注意下:

1、刚进入或刷新完页面后,上下的名字都是一样是因为:scope为true时,子作用域继承了父作用的属性和方法。因此虽然子作用域中没有定义name和age,

但是能从父作用域的myController中继承。因此,上下显示了相同的名字和年龄。

2、输入新名字后,上不变、下变得原因是:我们修改的是子作用域上的name和age,因此下面的名字会改变,上面的名字属于父作用域,父作用域是不能访问子作用域的,

因此上面的名字的值不会改变。

3、scope:{ }

指令的scope部分做如下修改:

scope:{
  name:"@",
  age:"@"
},

这时,载入页面的效果会变为:

我们会发现下面的名字和年龄并没有值,这时因为现在的作用域是隔离的,它并不知道父作用域的属性和方法。我们可以在指令的后面给其赋值,方法如下:

<div my-directive name="aaa" age="33"></div>

页面的载入会变为:

当我们输入新的名字时,效果如下

同样的原因,这个作用域是完全隔离的,因此修改只对指令自身的作用域的属性和方法有效,与其他任何作用域没有关系,myController作用域的名字并不会改变。

以上就是小编为大家带来的浅谈AngularJs指令之scope属性详解全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
jQuery 1.8 Release版本发布了
Aug 14 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
jQuery中:last选择器用法实例
Dec 30 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
简单的js计算器实现
Oct 26 Javascript
微信小程序开发之入门实例教程篇
Mar 07 Javascript
极简主义法编写JavaScript类
Nov 02 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 Javascript
重学JS之显示强制类型转换详解
Jun 30 Javascript
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 #Javascript
PHP捕捉异常中断的方法
Oct 24 #Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 #Javascript
浅谈Angular中ngModel的$render
Oct 24 #Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 #Javascript
H5移动端适配 Flexible方案
Oct 24 #Javascript
javascript的document中的动态添加标签实现方法
Oct 24 #Javascript
You might like
PHP的简易冒泡法代码分享
2012/08/28 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
js注入 黑客之路必备!
2016/09/14 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Django URL传递参数的方法总结
2016/08/28 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
工作决心书
2014/03/11 职场文书
白莲教口号
2014/06/18 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
放假通知
2015/04/14 职场文书
Python 如何安装Selenium
2021/05/06 Python
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python