在angular指令中隔离范围绑定

时间:2014-06-01 02:33:03

标签: angularjs

我正在尝试构建一个简单的指令,通过' @'在页面上创建一个带动态值的链接。绑定策略,我有它的工作,但我不知道' @'正在做。

我的指示如下:

(function() {
var app = angular.module('app', []);

app.directive('myDirective', function() {
    return {
        restrict: 'A',
        replace: true.
        scope: {
            myUrl: '@', // binding
            myLinkText: '@'
        },
        template: '<a href="{{myUrl}}">{{myLinkText}}</a>'
    }
});

})();

这是我的HTML:

<div my-directive
    my-url="http://google.com"
    my-link-text="Click me to go to Google.">
</div>

这与创建控制器有何不同?为什么我们需要在指令中执行此操作?换句话说,为什么我们需要创建另一个范围?我不理解隔离范围和绑定的概念。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

默认情况下,您的指令使用范围继承。这意味着如果未在当前作用域中定义作用域变量,它将在父作用域中搜索该变量,然后在其父作用域中搜索,直到最后,它将停止在$ rootScope中搜索。隔离范围不允许范围继承 - 它是一种使指令更加自包含的方式,更加模块化,具有更少的依赖性。外部作用域中的变量导入隔离作用域的最常见方式是通过属性。这就是@发挥作用的地方。有三种方法可以导入范围变量:

  1. @ - 作为字符串(可以插入)。
  2. = - 双向绑定到模型对象。
  3. &安培; - 作为在父作用域中计算的表达式(主要用于在父作用域中计算的方法调用)。