0

基本的に、作成したディレクティブの親スコープにアクセスできるようにしたいのですが、要素に配置した属性にもアクセスできるようにしたいと考えています。

たとえば、関連するjs

app.directive('testDirective', function(){
    return {
        restrict:"E",
        templateUrl:"directive.html",
        scope:{
            testAttribute: '='
        }
    };
});

app.controller('mainCtrl', function($scope){
     $scope.name = 'henry'
}

index.html

<div ng-controller="mainCtrl">
    <test-directive test-attribute="Hello"></test-directive>
</div>

ディレクティブ.html

{{testAttribute}}
{{name}}

「Hello Henry」ではなく「Hello」が出力される

明確にするために、私ができるようにしたいのは、属性と親スコープにアクセスすることだけです。

4

1 に答える 1

1

あなたがやろうとしていることについては、双方向バインディングは必要ありません。属性として割り当てられたテキストにアクセスしようとしています。ディレクティブを次のように書くことができます:-

.directive('testDirective', function(){
    return {
        restrict:"E",
        //scope:true,   //apply if required
        templateUrl:"directive.html",
        link:function(scope, elm, attrs){
           scope.testAttribute = attrs.testAttribute; //Get it from attributes
        }
    };
});

デモ

ここで、ディレクティブ設定のスコープ プロパティは、親スコープ自体を使用します。ただし、理想的なシナリオscope:true(親の子スコープ) または2 way binding独立したスコープを使用することをお勧めします。ただし、この時点では、元の目標が何であるかがよくわからないため、これは質問の内容に基づく解決策です。

要約すると: -

作成したディレクティブの親スコープにアクセスできるようにしたい

分離されたスコープを削除し、親のスコープのみを使用します。

しかし、要素に配置した属性にもアクセスできるようにしたいと考えています。

attrsリンク関数 ( ) の引数を使用しますattrs.testAttribute。バインドされた値として評価する場合は、do ( scope.$eval(attrs.testAttribute))

于 2014-10-05T02:42:15.903 に答える