默認是共享作用域:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body ng-app="myApp" ng-controller="mainController">
<ceshi></ceshi>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp',[]);
myApp.directive('ceshi',function(){
var option = {
template:'<p>{{abc}}</p>'
};
return option;
});
myApp.controller('mainController',function($scope){
$scope.abc = 'ericzheng';
});
</script>
</body>
</html>
當我們自己創建某個指令時,這個指令肯定不可能只使用一次,是要重復多次使用的,有的在一個頁面內或者一個控制器內需要使用多次。
類似上面的這種場景,在任何一個輸入框內改變數據,都會導致其他的標簽內的數據一同發生改變,這顯然不是我們想要的,這個時候就需要獨立作用域了。
想轉換成獨立作用域只需要一行代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body ng-app="myApp" ng-controller="mainController">
<ceshi></ceshi>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp',[]);
myApp.directive('ceshi',function(){
var option = {
template:'<p>{{abc}}</p>',
scope:{}
};
return option;
});
myApp.controller('mainController',function($scope){
$scope.abc = 'ericzheng';
});
</script>
</body>
</html>
單向數據綁定:
@操作符,雙引號內的內容當作字符串進行綁定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body ng-app="myApp" ng-controller="mainController">
<my-directive name="aaaa"></my-directive>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective',function(){
var option = {
template:'<p>wew{{name}}<p/>',
scope:{
name:'@'
}
};
return option;
});
myApp.controller('mainController',function($scope){
});
</script>
</body>
</html>
單向綁定,從當前指令的屬性中獲取到值,然后賦值給當前獨立作用域里的這個屬性
@.jpg
雙向數據綁定
=操作符 綁定的是個變量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body ng-app="myApp" ng-controller="mainController">
<input type="text" ng-model="abc">
<my-directive name="abc"></my-directive>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective',function(){
var option = {
template:'<p>wew{{name}}<input ng-model="name"><p/>',
scope:{
name:'='
}
};
return option;
});
myApp.controller('mainController',function($scope){
$scope.abc = 'ericzheng';
});
</script>
</body>
</html>
name="abc"這個是核心,左邊聯結的是獨立作用域,右邊聯結的是外部的作用域里的模型abc
![Uploading &_876533.jpg . . .]
使用父作用域的行為
&操作符 綁定的內容是個方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body ng-app="myApp" ng-controller="mainController">
<my-directive fn1="fn2(name)"></my-directive>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective',function(){
var option = {
restrict:'E',
template:'<button ng-click="fn1({name:\'username\'})">wfewef</button>',
scope:{
fn1:'&'
}
};
return option;
});
myApp.controller('mainController',function($scope){
$scope.fn2 = function(attr){
console.log(attr);
}
});
</script>
</body>
</html>
&.jpg
如何看懂:
先不管指令內部是怎么實現的,先看怎么用的,然后看一下對應的父作用域里的變量或方法是怎么定義的。