浅谈AngularJs指令之scope属性详解  更新时间:2016年10月24日 10:15:59   投稿:jingxian   下面小编就为大家带来一篇浅谈AngularJs指令之scope属性详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 AngularJS使用directive()方法类定义一个指令: .directive(“name”,function(){ return{ }; }) 上面是定义一个指令的主体框架,该方法接受两个参数: 1、第一个参数:name表示定义的指令的名称(angularjs会用这个name注册这个指令) 2、第二个参数:函数,该番薯必须返回一个对象或者一个函数,但通常我们会返回一个对象。return后接的就是返回的对象。 在返回的对象中有一个scope属性,这个属性用来修饰指令的作用域。 每次在注册一个指令的时候,这个指令都会考虑一个问题,我们用我自己所在作用域呢,还是创建一个从父作用域继承的子作用域呢, 还是创建一个隔离的作用域呢(不依赖外部的作用域); scope属性的值为false,true,{ } 分别对应着上面的所在作用域,子作用域,隔离作用域。 我们举三个例子让我们彻底明白这几个属性的用法。 1、scope:false html代码: 我的名字是 我的年龄是 效果: 这时,指令的作用域是和myController的作用域是相同的,因此当我们在输入框中输入新的名字时,上下两处的名字都会跟着变动,如下图所示: 2、scope:true 这时刚进入页面的效果,当我们在输入框输入新的名字时,就会发生和第一个实验不一样的效果,如图所示: 这里,上部分的名字没有发生改变,而下面的名字发生了改变。 这个实验中,有两点需要我们注意下: 1、刚进入或刷新完页面后,上下的名字都是一样是因为:scope为true时,子作用域继承了父作用的属性和方法。因此虽然子作用域中没有定义name和age, 但是能从父作用域的myController中继承。因此,上下显示了相同的名字和年龄。 2、输入新名字后,上不变、下变得原因是:我们修改的是子作用域上的name和age,因此下面的名字会改变,上面的名字属于父作用域,父作用域是不能访问子作用域的, 因此上面的名字的值不会改变。 3、scope:{ } 指令的scope部分做如下修改: scope:{ name:”@”, age:”@” }, 这时,载入页面的效果会变为: 我们会发现下面的名字和年龄并没有值,这时因为现在的作用域是隔离的,它并不知道父作用域的属性和方法。我们可以在指令的后面给其赋值,方法如下: 页面的载入会变为: 当我们输入新的名字时,效果如下 同样的原因,这个作用域是完全隔离的,因此修改只对指令自身的作用域的属性和方法有效,与其他任何作用域没有关系,myController作用域的名字并不会改变。 以上就是小编为大家带来的浅谈AngularJs指令之scope属性详解全部内容了,希望大家多多支持脚本之家~ 您可能感兴趣的文章: Angularjs中三种数据的绑定策略(“@”,“=”,“&”) AngularJS指令中的绑定策略实例分析 详解angularjs中的隔离作用域理解以及绑定策略 详解angularJs指令的3种绑定策略 angularjs指令之绑定策略(@、=、&) angularJS 中$scope方法使用指南 AngularJS中监视Scope变量以及外部调用Scope方法 深入解析AngularJS框架中$scope的作用与生命周期 AngularJs Scope详解及示例代码 AngularJS中scope的绑定策略实例分析 angularjs 指令 scope 相关文章 Angular数据绑定机制原理 本篇文章主要介绍了Angular数据绑定机制原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-04-04 AngularJS路由Ui-router模块用法示例 这篇文章主要介绍了AngularJS路由Ui-router模块用法,结合实例形式分析了Ui-router模块的功能、使用方法及相关注意事项,需要的朋友可以参考下 2017-05-05 Angular 开发学习之Angular CLI的安装使用 这篇文章主要介绍了Angular 开发学习之Angular CLI的安装使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-12-12 Angular父组件调用子组件的方法 组件是一种特殊的指令,使用更简单的配置项来构建基于组件的应用程序架构.这篇文章主要介绍了Angular组件——父组件调用子组件方法,需要的朋友可以参考下 2018-04-04 AngularJS的ng-click传参的方法 本篇文章主要介绍了AngularJS的ng-click传参的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-06-06 angularJS深拷贝详解 本篇文章主要介绍了angularJS深拷贝,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-03-03 基于AngularJS实现页面滚动到底自动加载数据的功能 本文主要给大家介绍基于AngularJS实现页面滚动到底自动加载数据的功能,通过第三方控件来实现,感兴趣的朋友跟着小编一起看看具体实现代码吧 2015-10-10 Angular 4依赖注入学习教程之组件服务注入(二) 大家都知道依赖注入式AngularJS的重要特性之一,之前我们已经介绍了关于Angular 4依赖注入基础的内容,下面这篇文章主要给大家介绍了关于Angular 4依赖注入之组件服务注入的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。 2017-06-06 AngularJS入门教程(零):引导程序 这篇文章主要介绍了AngularJS入门教程(零):引导程序,本文是系列文章中的一篇,本系列文章用开发一个AngularJS应用来讲解,需要的朋友可以参考下 2014-12-12 AngularJS中的DOM操作用法分析 这篇文章主要介绍了AngularJS中的DOM操作,较为详细的分析了AngularJS针对DOM操作的原理、实现技巧与相关注意事项,需要的朋友可以参考下 2016-11-11 最新评论

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属性详解全部内容了,希望大家多多支持脚本之家~

您可能感兴趣的文章:

  • Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
  • AngularJS指令中的绑定策略实例分析
  • 详解angularjs中的隔离作用域理解以及绑定策略
  • 详解angularJs指令的3种绑定策略
  • angularjs指令之绑定策略(@、=、&)
  • angularJS 中$scope方法使用指南
  • AngularJS中监视Scope变量以及外部调用Scope方法
  • 深入解析AngularJS框架中$scope的作用与生命周期
  • AngularJs Scope详解及示例代码
  • AngularJS中scope的绑定策略实例分析
张贴在3