浅谈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 相关文章推荐
解析John Resig Simple JavaScript Inheritance代码
Dec 03 Javascript
jQuery实现瀑布流的取巧做法分享
Jan 12 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
Apr 12 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
Angular2学习笔记之数据绑定的示例代码
Jan 03 Javascript
es6新特性之 class 基本用法解析
May 05 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
May 05 Javascript
JavaScript canvas绘制渐变颜色的矩形
Feb 18 Javascript
koa-passport实现本地验证的方法示例
Feb 20 Javascript
node+vue实现文件上传功能
May 28 Javascript
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
thinkPHP自定义类实现方法详解
2016/11/30 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
基于vue组件实现猜数字游戏
2020/05/28 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
vue项目实战总结篇
2018/02/11 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
python字符串的常用操作方法小结
2016/05/21 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Flask之请求钩子的实现
2018/12/23 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
python re的findall和finditer的区别详解
2020/11/15 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
国外的一些J2EE面试题一
2012/10/13 面试题
八年级语文教学反思
2014/02/11 职场文书
无毒社区工作方案
2014/05/23 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
教师党员自我评价范文
2015/03/04 职场文书
会议通知格式范文
2015/04/15 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript