1

我正在尝试创建一个指令,我需要一些额外的细节,这些细节必须作为元素的属性传递。

这些值是静态的。即:在父作用域中不会有任何作用域引用(它是一个布尔值)

在指令链接函数中,我需要这些属性可以在指令的链接函数中访问,但值是未定义的。

标记:

<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"
}]);

在这个演示中,我需要在链接函数中获取值attributescope.localAttr

演示:小提琴

4

2 回答 2

2

如果值为 100% 静态,则可以使用iAttrs.localAttr(并且可以跳过 bind in scope: {..}

如果值应该被插值(有{{...}})你应该使用iAttrs.$observe('localAttr', cb)(你也可以跳过提到它scope: {...}

如果您想对其他范围属性进行一些操作,您应该$scope.watch('localAttr', cb).

甚至可以预期,在链接期间,范围可能无法完全构建。在有关链接函数的“范围”参数的 AngularJS 文档中,有

指令用于注册手表的范围。

http://docs.angularjs.org/guide/directive

所以通常你只能注册观察者,而不能获取值。

于 2013-02-19T09:51:04.783 回答
0

我注意到这是 AngularJS 中的错误还是预期的行为,但是在执行链接函数时未设置 scope.localAttr。但是,如果您将:更改console.log(scope.localAttr, scope.localRef);为:console.log(scope, scope.localAttr, scope.localRef);并检查范围对象,您会看到 scope.localAttr 被设置,但这似乎是在调用链接函数之后发生的,因为链接函数内部的 scope.localAttr 是未定义的。

于 2013-02-19T09:45:44.570 回答