浅谈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 相关文章推荐
浅说js变量
May 25 Javascript
js正文内容高亮效果的实现方法
Jun 30 Javascript
js验证IP及子网掩码的合法性有效性示例
Apr 30 Javascript
JavaScript中对JSON对象的基本操作示例
May 21 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
Aug 08 Javascript
JQuery遍历元素的父辈和祖先的方法
Sep 18 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
Dec 11 Javascript
vue实现微信获取用户信息的方法
Mar 21 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
Aug 02 jQuery
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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
数据库的日期格式转换
2006/10/09 PHP
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
模拟select的代码
2011/10/19 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
简单实现python爬虫功能
2015/12/31 Python
Django的分页器实例(paginator)
2017/12/01 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python元组的概念知识点
2019/11/19 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
数控技术专业毕业自荐书范文
2014/02/05 职场文书
医药营销个人求职信
2014/04/12 职场文书
平安建设汇报材料
2014/12/29 职场文书
孔庙导游词
2015/02/04 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
MySQL基于索引的压力测试的实现
2021/11/07 MySQL