最近对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,到这里为止,我想我说得应该很清楚了,希望能帮到读者理解“=”绑定。