接上一篇

说了“=”绑定,我们再来说“@”绑定:

如果读了我对“=”绑定的理解的读者一定知道,在我的理解中有个“桥梁”的说法,如果不知道的请先去读我的上一篇博文:http://1730634.blog.51cto.com/1720634/1661748

先看案例:

<!DOCTYPE html>
<html lang="en" ng-app="MyModule">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <div>
            <input type="text" ng-model="color" placeholder="Enter a color"/>
            <bind-property color-prop="{{color}}"></bind-property>
            <bind-property color-prop="color"></bind-property>
            <bind-property color-prop="color()"></bind-property>
        </div>
    </body>
    <script type="text/javascript" src="../framework/angular.js"></script>
    <script type="text/javascript" src="../js/scopebind@.js"></script>
</html>

scopebind@.js中的内容:

var myModule = angular.module("MyModule",[]);

myModule.directive("bindProperty",function(){
    return {
        scope:{
            tcolor:"@colorProp"
        },
        restrict:'E',
        template:"<input type='text' ng-model='tcolor' style='background-color:{{tcolor}}'/>",
        replace:true
    };
});

上面的代码已经很清晰了,写了一个bind-property的指令,绑定指令变量tcolor到模板中的color变量,@绑定是单项绑定,只有color的值变化才会导致tcolor的变化。而我多写了几个bind-property指令,直接赋值字符串“color”和“color()”,这两个字符串和color一点关系都没有,不会随着其变化为变化,因为我并没有将其和“ng-model="color"”中定义的color进行绑定,只有“{{color}}”才叫做读取了MyModule中的color的值

OK,说到这里也说得差不多了,如果觉得还是有点绕,就再去看看我对“=”绑定的理解吧,然后自己将代码复制到本地试试,多修改修改来加深理解。


补充一点:简写的方式和上篇博文中是一样的方式