AngularJS隔离范围属性绑定教程
时间:2020-02-23 14:29:35 来源:igfitidea点击:
在上一教程中,我们已经讨论了隔离范围及其基本用法。
我们使用{}(对象哈希)来隔离范围,这在创建可重用组件时非常有用。
因此,它将不会继承或者修改父作用域中的数据。
由于隔离作用域采用对象哈希,因此我们可以定义一组局部属性。
这些属性对于模板的别名值很有用。
@或者@attr –将本地范围属性绑定到DOM属性的值。
" ="或者" = attr" –在本地范围属性和通过attr属性的值定义的名称的父范围属性之间建立双向绑定。
"&"或者"&attr" –提供了一种在父作用域的上下文中执行表达式的方法。
在本教程中,我们将通过一个示例讨论隔离范围属性绑定。
隔离范围属性
" @"或者" @attr"用于将本地"作用域"属性绑定到DOM属性的值。
我们将通过一个示例详细讨论此属性。
让我们创建一个指令myEmployee,以显示员工的角色并用空对象隔离作用域。
在下面的示例中,我们不使用'@'属性。
在示例中,我们使用了link函数将scope属性设置为attribute角色的值。
var app = angular.module('mainApp', []);
app.directive("myEmployee", function() {
return {
restrict: 'E',
scope:{},
template: '<h3> Employee Role : {{role}} </h3>',
link: function(scope,element,attrs){
scope.role = attrs.role;
}
};
});
我们在以下HTML代码中使用了myEmployee指令,并将字符串值传递给role属性
<div ng-app="mainApp">
<my-employee role="development"></my-employee>
</div>
您将在浏览器中看到以下输出。
使用隔离范围" @"
通过使用隔离范围'@'属性来绑定role属性的值,可以摆脱上面示例中的link函数。
您可以简单地使用以下语法将" scope"属性绑定到属性值。
scope:{
attribute:"@"
}
下面的示例演示隔离范围属性绑定。
var app = angular.module('mainApp', []);
app.directive("myEmployee", function() {
return {
restrict: 'E',
scope:
{
role:"@"
},
template: '<h3> Employee Role : {{role}} </h3>'
};
});
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="utf-8">
<title>AngularJS Isolate Scope</title>
</head>
<body>
<div ng-app="mainApp">
<my-employee role="development"></my-employee>
</div>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script type="text/javascript" src="app.js"></script>
</body>
</html>
您将在浏览器中看到相同的输出。
使用隔离范围" @attr"
您还可以使用@ attr属性代替'@'属性,以便可以通过名称来区分作用域属性和属性。
以下示例演示了此用法,您将在浏览器中看到相同的输出。
我们已经将myEmployee指令的属性名称设置为myrole。
通过使用@attr,myrole属性的值将设置为scope属性。
var app = angular.module('mainApp', []);
app.directive("myEmployee", function() {
return {
restrict: 'E',
scope:
{
role:"@myrole"
},
template: '<h3> Employee Role : {{role}} </h3>'
};
});
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="utf-8">
<title>AngularJS Isolate Scope</title>
</head>
<body>
<div ng-app="mainApp">
<my-employee myrole="development"></my-employee>
</div>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script type="text/javascript" src="app.js"></script>
</body>
</html>

