如何限制指令的范围,为什么要这样做呢?

Scope 用作我们用于在父控制器,指令和指令模板之间进行通信的粘合剂。每当 AngularJS 应用程序被引导时,都会创建一个 rootScope 对象。控制器,指令和服务创建的每个范围都是从 rootScope 原型继承的。

是的,我们可以限制指令的范围。我们可以通过为指令创建一个独立的范围来实现。

有三种类型的指令范围:

  1. 范围:假(指令使用其父范围)
  2. 范围:真(指令获得新范围)
  3. 范围:{}(指令获得一个新的孤立范围)

具有新隔离范围的指令: 当我们创建新的隔离范围时,它将不会从父范围继承。此新作用域称为隔离作用域,因为它与其父作用域完全分离。为什么?我们应该使用隔离范围:当我们想要创建自定义指令时,我们应该使用隔离范围,因为它将确保我们的指令是通用的,并放置在应用程序内的任何位置。父范围不会干扰指令范围。

隔离范围示例:

var app = angular.module("test",[]);

app.controller("Ctrl1",function($scope){
    $scope.name = "Prateek";
    $scope.reverseName = function(){
        $scope.name = $scope.name.split('').reverse().join('');
    };
});
app.directive("myDirective", function(){
    return {
        restrict: "EA",
        scope: {},
        template: "<div>Your name is : {{name}}</div>"+
        "Change your name : <input type='text' ng-model='name'/>"
    };
});

AngularJS 为隔离范围提供了 3 种类型的前缀,它们是:

  1. “@”(文本绑定/单向绑定)
  2. “=”(直接模型绑定/双向绑定)
  3. “&”(行为绑定/方法绑定)

所有这些前缀都从指令元素的属性接收数据,如:

<div my-directive 
  class="directive"
  name="{{name}}" 
  reverse="reverseName()" 
  color="color" >
</div>