最近对AngularJS感兴趣了,程序员就是这样,一旦对某个兴趣感兴趣了,就会一发不可收的去理解里面的每一个细节,所谓“书到用书方恨少”。
Angular的自定义指令不是太好理解(也有可能鄙人理解能力偏低),不知道有没有同僚和我一样,希望我的理解能帮助到你们,老鸟勿喷,Angular的其他知识点就不多说了,百度一大堆。
Angular的scope绑定分为以下几种:‘@’、‘=’、‘&’,一个一个说。
先说‘=’,为什么先说这个呢?因为我在理解这个绑定策略的时候不是很清楚,花了点时间才算搞清楚了,先看案例:
<!DOCTYPE html>
<html lang="en" ng-app='MyModule'>
<head>
<meta charset="UTF-8">
<title>ScopeEqual</title>
</head>
<body ng-controller='MyCtrl'>
控制器:
<input type="text" ng-model="name"/><br/>
指令:
<hello for-name="name"></hello>
</body>
<script src="../framework/angular.js"></script>
<script src="../js/scopeEqual.js"></script>
</html>
scopeEqual.js中的内容:
var myModule = angular.module('MyModule',[]);
myModule.controller("MyCtrl",["$scope",function($scope){
// $scope.name = 'wilson';
}]);
myModule.directive('hello',function(){
return {
restrict:'AE',
scope:{
tname:"=forName"
},
template:"<input type='text' ng-model='tname'/>",
replace:true
}
});
我 用不同的颜色对几个关键点进行了标注:红色是模板中(也就是controller中的数据),紫色是指令中的数据,蓝色是模板中和指令中都有的。为什么要 这样标注了,可能细心的读者已经猜到了,蓝色其实就是模板和指令之间沟通的桥梁,是的,就是桥梁,网上很多教程只说了简写的方式(即“tname:"="”),但没有说清楚最普通的情况,也就是这些名字之间的关系:模板中的变量随意改变,指令中的变量随意改变,只要桥梁一致,都能绑定成功。那什么时候出现可以只写“=”的特殊情况呢?也就是当“蓝色”和“紫色”的名字相同的时候就出现特殊情况了,可以只写“=”。
OK,到这里为止,我想我说得应该很清楚了,希望能帮到读者理解“=”绑定。