AngularJS自定义指令–隔离范围教程
时间:2020-02-23 14:29:33 来源:igfitidea点击:
之前,我们研究了不同的指令属性,并使用这些属性创建了一个简单的指令。
在本教程中,我们将讨论如何使用"作用域"属性隔离指令的范围。
隔离范围
在AngularJS中,指令默认情况下可以直接访问其父级。
因此,我们只能在给定范围内使用一次。
如果要使其可重用,则必须将其与父作用域隔离。
我们可以使用指令的"作用域"属性来隔离范围。
这是一个棘手的话题,当您第一次看到它时可能看起来有些复杂,但这是angularJS的强大功能。
因此,我们将从基础知识开始,并在接下来的文章中探索所有高级功能。
为什么要隔离范围
在使用"作用域"属性之前,让我们看看如果不使用此属性会发生什么。
让我们创建名为myEmployee指令的指令以显示文本输入元素。
ng-model指令绑定在文本字段中输入并内联显示的值。
app.js
var app = angular.module('mainApp', []); app.directive("myEmployee", function() { return { restrict: 'E', template: '<br> <input type="text" ng-model="someText"> {{someText}}' }; });
在下面的index.html文件中,我们使用了myEmployee指令来显示三个输入元素。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8"> <title>AngularJS Isolate Scope</title> </head> <body> <div ng-app="mainApp"> <my-employee></my-employee> <my-employee></my-employee> <my-employee></my-employee> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script src="app.js"></script> </body> </html>
您将在浏览器中看到以下输出,并在任何字段中输入一些数据。
您可以看到,即使我们更改单个字段,所有字段也会使用最新更改进行更新。
这是因为它们都共享相同的范围。
这就是为什么我们需要隔离每个指令的范围的原因。
隔离范围示例
我们可以通过向指令添加scope
属性来隔离指令的范围。
现在,我们将一个空对象传递给scope属性以使其可重用。
在接下来的文章中,我们将看到" @","&"和" ="与" scope"属性的使用。
app.js
var app = angular.module('mainApp', []); app.directive("myEmployee", function() { return { restrict: 'E', scope:{}, //this will isolate the scope. template: '<br> <input type="text" ng-model="someText"> {{someText}}' }; });
<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8"> <title>AngularJS Isolate Scope</title> </head> <body> <div ng-app="mainApp"> <my-employee></my-employee> <my-employee></my-employee> <my-employee></my-employee> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script src="app.js"></script> </body> </html>
在下面的字段中键入内容,您可以看到其中一个字段的更改不会影响其余字段。