Page 72 - AngularJS权威教程
P. 72
52 第 8 章 指令简介
象只能在指令的方法中或指令的模板字符串中使用:
template: '<div>\
we have access to {{ someProperty }}\
</div>',
controller: function($scope) {
//指令可以有它自己的控制器,
// 那种情况下我们可以
// => 错误!!!
$scope.someProperty === "needs to be set";
}
错误?
目前为止,我们一直忽略了一个细节。实际上不能像上面的例子那样,在作用域对象内部直
接设置someProperty属性。
scope: {
// 这样行不通
someProperty: 'needs to be set'
}
实际上要在DOM中像之前提到过的那样,像给函数传递参数一样,通过属性来设置值:
<div my-directive
some-property="someProperty with @ binding">
</div>
现在,我们在作用域对象内部把someProperty值设置为@这个绑定策略。这个绑定策略告诉
AngularJS将DOM中some-property属性的值复制给新作用域对象中的someProperty属性:
scope: {
someProperty: '@'
}
注意,默认情况下someProperty在DOM中的映射是some-property属性。如果我们想显式
指定绑定的属性名,可以用如下方式:
scope: {
someProperty: '@someAttr'
}
在这个例子中,被绑定的属性名是some-attr而不是some-property。
<div my-directive
some-attr="someProperty with @ binding">
</div>
现在,当我们在指令模板或控制器中(之前的例子这样做过)访问someProperty时,会得
到DOM属性中的值的副本:
template:'<div>\
we have access to {{ someProperty }}\
</div>',
controller: function($scope) {
// 指令可以有它自己的控制器,在那种情况下,我们可以将
// $scope.someProperty设置成"someProperty with @ binding"
}