同じテンプレートを異なるモデルで再利用できるように、テンプレートで使用されるモデルのエイリアスを設定したいと思います。たとえば、次のモデルの場合:ngtemplateでのモデルのエイリアス
member = {
name: "Member1",
children:[
{
name:"Child1"
},
{
name:"Child2"
}
]
}
"member"と "children"の両方に "name"プロパティがあります。だから私は、この "名前"プロパティを操作する単一のテンプレートを作成したいと思います。
:app.directive('member', function(){
return {
restrict: 'A',
template: "{{prefix}}<input type='text' ng-model='member.name'>",
scope: {
member: "="
}
};
});
後は、このディレクティブの使い方です:
Bind ngInclude to different models
私のようなディレクティブを作成し、示唆したように: 私はこの質問の助けを借りてこれを達成することができました
<div ng-controller="MemberCtrl">
{{member | json}}
<div member="member"></div>
<div member="member.children[0]"></div>
</div>
テンプレートの再利用は可能でしたが、私の指示に「範囲」を使用しているため、これでイオラが作成されていますコントローラスコープのどのプロパティにもアクセスできないスコープです。コントローラーの場合:
app.controller('MemberCtrl', function($scope){
$scope.member = {
name: "Member1",
children:[
{
name:"Child1"
},
{
name:"Child2"
}
]
};
$scope.prefix = "Mr.";
});
指示文内のテンプレートは「接頭辞」プロパティーにアクセスできません。以下は、jsfiddleです:
http://jsfiddle.net/vaibhavgupta007/mVBaC/1/
この中に問題がある可能性がありますか?
編集
私はまた、接頭辞にアクセスするには$親を使用することができます。しかし、このきれいなアプローチです。
はいこれは1つのアプローチですが、どのようにしてヘルパー関数にもアクセスできるようにコントローラスコープをディレクティブに公開します。たとえば、コントローラがスコープ内に "joinNameWithPrefix"という機能を持っていた場合、その命令にはアクセスできなくなります。 – Vaibhav
この場合、ディレクティブ定義オブジェクトから 'スコープ'を完全に除外することができます。ディレクティブは独立したスコープを作成しませんが、デフォルトでは親スコープを使用します。 – Stewie
しかし、私はエイリアシングを達成することができません。私にはチキンと卵の問題のように見えます:)私はエイリアシングがまっすぐ進む方法を使ってangularjsでサポートされていないと思います。テンプレートで$ parentを使用する必要があります。 – Vaibhav