2013-08-28 11 views
9

私が隔離されたスコープを使用している場合は、変数に属性を渡すことができます。ディレクティブのJavaScript継承された(分離されていない)スコープを持つディレクティブに変数を渡すAngularjs

.directive('myDirective', function() { 
    return { 
    scope: { 
     'baz': '=' 
    } 
    } 
}); 

に続いて

<my-directive baz='foo.bar'> 

すなわち

は、継承されたスコープと似た何かをする方法はありますか?リンク関数は文字列を渡すだけです。

今、私は自分自身で変数を解析し、スコープに一致させています。$ parent。ヘルパー機能が必要なように思えるし、それをやるための簡単な方法があるようだ。

+0

指示コード内から親スコープにアクセスすることを意味しますか? –

答えて

14

使用$evalまたは$parse

<my-directive baz='foo.bar'> 

.directive('myDirective', function($parse) { 
    return { 
    scope: true, 
    link: function(scope, element, attrs) { 
     console.log(scope.$eval(attrs.baz)); 
     var model = $parse(attrs.baz); 
     console.log(model(scope)); 
     // if you want to modify the value, use the model, not $eval: 
     model.assign(scope, "new value"); 
    } 
    } 
}); 
+0

私は$ parseについて知らなかった。それはこれを行う良い方法です。 – BoxerBucks

0

あなたはディレクティブでスコープオブジェクトを宣言しない場合、そこには分離された範囲の設定しないであろうと、あなたがへのアクセスを取得しますDOM内でdivが宣言されている場所から渡されるスコープです。このような

何か:

.directive('myDirective', function() { 
    return { 
    function(scope, element, attrs){ 
     //scope here = the inherited scope from the DOM 
    } 
} 

あなたはDIVタグで宣言されたあなたのディレクティブを持っているのであれば、あなたが実際に属性としての価値に送信する必要はありません - あなただけのからそれを引き出すことができます範囲。このコードで

3

link: function(scope, elem, attrs) {} 

すべてatributesこのディレクティブに割り当てる取得する

attrs 

要素を使用することができます。

あなたは任意のスコープにattrsを割り当ててe.x templaeで使用することができます。

scope.someValue = attrs.attrName; 

要約すると:

指令:

link: function(scope, elem, attrs) { 
     scope.someValue = attrs.attrName; 
    } 

指令テンプレート:

<div> {{someValue}} <div> 

指令コール

<my-directive attrName="foo"> </my-directive> 
+0

これは文字列や多分boolなどでしか動作しません。オブジェクトではないでしょうが、おそらく問題になります。 – Millenjo