2016-04-21 5 views
1

私は、次の親と子(http://jsfiddle.net/j1ee5zss/2/)持っている:私は「私のモデル」、例えば、親モデルを取得しようとしていた子ディレクティブでディレクティブのスコープ変数が定義されていないのはなぜですか?

<div parent parent-model="my-model"> 
    <div child>Child</div> 
</div> 

を:

app.directive("parent", parent); 

function parent() { 

    var parent = { 
    controller: ["$scope", controller], 
    replace: false,  
    restrict: "A", 
    scope: { 
     model: "=" 
    }  
    }; 

    return parent; 

    function controller($scope) { 
    this.getModel = function() { 
     return $scope.model; 
    }  
    } 
} 

app.directive("child", child); 

function child() { 
    var child = { 
    link: link, 
    replace: false, 
    require: "^parent", 
    restrict: "A" 
    }; 
    return child; 
    function link(scope, element, attributes, controller) {  
    var model = controller.getModel(); 
    console.log(model);  
    } 
} 

なぜモデルがありますconsole.log(model)を書くと未定義ですか?

+0

あなたが提供したフィディルドでは未定義には戻っていないようです。 – Ioan

+0

実際、コンソールに 'model'と表示されます(chrome/mac最新版) – Pevara

+0

申し訳ありませんが、間違ったフィドル...新しいものを確認してください。ちょうど私の質問を更新しました –

答えて

0

parentModelを監視する必要がありますが、モデルは監視しないでください。

 scope: { 
      parentModel: "=" 
     } 

属性モデルのみを使用してください。

+0

それはそれを解決していませんでした... –

+0

あなたはまた変更しました ファンクションコントローラ($スコープ){ this.getModel = function(){ return $ scope.parentModel; } } –

+0

はい、今は "my-model"の代わりに0が得られます...理由が分かりません。ここに更新された手品があります:http://jsfiddle.net/c3s8q2f9/ –

0

文字列my-modelを取得する場合は、引用符で囲む必要があります。 JS

scope: { 
    model: "=parentModel" 
} 

あなたは、双方向結合=との範囲に属性をバインド

<div parent parent-model="'my-model'"> 
    <div child>Child</div> 
</div> 

は、属性がないリテラルとして、角度表現として評価されます。

+0

''を使用せずにchildディレクティブのmy-model文字列を取得する方法はありますか? –

0

双方向バインディングを正しく実行していません。分離スコープの 'model' $スコープ変数の名前を作成しているので、これは親属性の値を取得する方法です。親モデル。あなたのコントローラで私のモデル値を持つ提供される

scope: { model: "=parentModel" }

関連する問題