我正在尝试创建一个指令,我需要一些额外的细节,这些细节必须作为元素的属性传递。
这些值具有静态性质。 ie:父作用域中不会有任何作用域引用(它是一个布尔值)
在指令链接函数中,我需要在指令的链接函数中访问这些属性,但该值是未定义的。
标记:
<div ng-app="myApp">
<div ng-controller="MainCtrl">
<div my-directive local-attr="attribute" local-ref="ref">
</div>
</div>
</div>
JS:
var myApp = angular.module('myApp', []);
myApp.directive('myDirective', function(){
return {
scope: {
localAttr:'@',
localRef:'='
},
link: function(scope, iElement, iAttrs, controller) {
console.log(scope.localAttr, scope.localRef);
}
};
});
myApp.controller('MainCtrl', ['$scope', function($scope){
$scope.ref="reg"
}]);
在此演示中,我需要在链接函数中获取attribute
的值scope.localAttr
。
演示:Fiddle
答案 0 :(得分:2)
如果值为100%静态,则可以使用iAttrs.localAttr
(并且可以跳过scope: {..}
中的绑定)
如果值应该插值(有{{...}}
),您应该使用iAttrs.$observe('localAttr', cb)
(并且您也可以跳过在scope: {...}
中提及它)
如果您想对其他范围属性进行一些操作,则应$scope.watch('localAttr', cb)
。
甚至可以预期,在连接期间,范围可能无法完全构建。在AngularJS文档中,关于链接函数的“范围”参数有
指令用于注册手表的范围。
http://docs.angularjs.org/guide/directive
所以一般来说,你只能注册观察者,而不能获得价值。
答案 1 :(得分:0)
我要注意,如果这是AngularJS中的错误,或者它是否是预期的行为,但是当链接函数执行时,不会设置scope.localAttr。但是如果您将console.log(scope.localAttr, scope.localRef);
更改为:console.log(scope, scope.localAttr, scope.localRef);
并检查范围对象,您将看到scope.localAttr已设置,但这似乎发生在自scope.localAttr以来调用链接函数之后链接函数内部未定义。