我正在尝试构建一个简单的指令,通过' @'在页面上创建一个带动态值的链接。绑定策略,我有它的工作,但我不知道' @'正在做。
我的指示如下:
(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>
这与创建控制器有何不同?为什么我们需要在指令中执行此操作?换句话说,为什么我们需要创建另一个范围?我不理解隔离范围和绑定的概念。谢谢你的帮助。
答案 0 :(得分:2)
默认情况下,您的指令使用范围继承。这意味着如果未在当前作用域中定义作用域变量,它将在父作用域中搜索该变量,然后在其父作用域中搜索,直到最后,它将停止在$ rootScope中搜索。隔离范围不允许范围继承 - 它是一种使指令更加自包含的方式,更加模块化,具有更少的依赖性。外部作用域中的变量导入隔离作用域的最常见方式是通过属性。这就是@发挥作用的地方。有三种方法可以导入范围变量: