2016-11-11 16 views
0

角のコンポーネントを作成し、コンポーネントの内部HTMLを継承しようとしていますが、内部HTMLのマークアップがコンパイルされていないようです。これの私の使用例は、コンポーネントに複数の方法で使用したい属性バインディングがあるため、テンプレートがまったく同じになることはありません。継承されたマークアップを使用した角の部分

例えば、私は次のような単純なコントローラを持っていると言う:

class ComponentCtrl { 
    $onInit() { 
     this.variable = 'hello world'; 
    } 
} 

let MyComponent = { 
    controller: ComponentCtrl 
}; 

app.component('myComponent', MyComponent); 

私は、次のHTMLをしたい:

<my-component> 
    <div style="color: green;">{{ $ctrl.variable }}</div> 
</my-component> 
<my-component> 
    <div style="color: red;">{{ $ctrl.variable }}</div> 
</my-component> 

としてレンダリングするために:今、しかし

<div style="color: green;">hello world</div> 
<div style="color: red;">hello world</div> 

と表示されます。
<div style="color: green;"></div> 
<div style="color: red;"></div> 

評価が評価されていません。

私が間違っていることはありますか?

+0

角度が1 ou 2ですか? – qchap

+0

これは角度1(バージョン1.5)です。 – snusnu

+0

あなたがしようとしていることは、現在のところ、角度指示やコンポーネントでは不可能です(可能性はありません)。残念ながら、継承された要素は、継承される要素の子スコープの一部にはなりません。この場合、 '$ ctrl'は' ComponentCtrl'ではなく 'my-component'の上のコントローラを参照しています。 – Claies

答えて

0

{{ }}の中にコントローラの正しい名前をhtmlで記述しましたか? controller: ComponentCtrlと書いて{{ $ctrl.variable }}と書いた。同じ名前を持つ必要があるように見える

+0

私はcontrollerAsプロパティで別の名前を定義していない限り、コントローラ名はデフォルトで$ ctrlだと思っていました。 – snusnu

+0

はい、問題は別の場所にあるはずです –

0

デフォルトでは、トランジションは行われません。コンポーネントには、トランスコードする必要があることを明確にする必要があります。また、あなたはトランスクリプトの対象となるテンプレートを明確にしていませんでした。したがって、コンポーネントは次のようになります。

ただし、コンポーネントのスコープは常に分離されています。したがって、ouはコンポーネント外から{{ $ctrl.variable }}にアクセスすることはできません。

+0

あなたが示唆したようにtranscludeを設定しようとしましたが、内部のHTMLマークアップはまだ評価されていません。私はここでjsFiddleをデモンストレーションしました:[jsFiddle](https://jsfiddle.net/adrosenthal/ng43f688/2/) – snusnu

+0

これはコンポーネントスコープが常に分離されているからです。したがって、バインディングからでなければ、コンポーネントの外部からアクセスすることはできません。これをチェックしてくださいhttps://jsfiddle.net/ng43f688/3/ –

0

私は問題が{{ $ctrl.variable }}から来ると思います。実際に$ ctrlは、コンポーネントのコントローラではなく、親コントローラとリンクしようとします。

コンポーネントのコントローラとやり取りする場合は、いくつかのパラメータを使用する必要があります。

関連する問題