如何限制指令的范围,为什么要这样做呢?
Scope 用作我们用于在父控制器,指令和指令模板之间进行通信的粘合剂。每当 AngularJS 应用程序被引导时,都会创建一个 rootScope 对象。控制器,指令和服务创建的每个范围都是从 rootScope 原型继承的。
是的,我们可以限制指令的范围。我们可以通过为指令创建一个独立的范围来实现。
有三种类型的指令范围:
- 范围:假(指令使用其父范围)
- 范围:真(指令获得新范围)
- 范围:{}(指令获得一个新的孤立范围)
具有新隔离范围的指令: 当我们创建新的隔离范围时,它将不会从父范围继承。此新作用域称为隔离作用域,因为它与其父作用域完全分离。为什么?我们应该使用隔离范围:当我们想要创建自定义指令时,我们应该使用隔离范围,因为它将确保我们的指令是通用的,并放置在应用程序内的任何位置。父范围不会干扰指令范围。
隔离范围示例:
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 种类型的前缀,它们是:
- “@”(文本绑定/单向绑定)
- “=”(直接模型绑定/双向绑定)
- “&”(行为绑定/方法绑定)
所有这些前缀都从指令元素的属性接收数据,如:
<div my-directive
class="directive"
name="{{name}}"
reverse="reverseName()"
color="color" >
</div>