同じテンプレートを別のモデルに再利用できるように、テンプレートで使用されるモデルにエイリアスを設定したいと考えています。たとえば、次のモデルでは:
member = {
name: "Member1",
children:[
{
name:"Child1"
},
{
name:"Child2"
}
]
}
「メンバー」と「子」の両方に「名前」プロパティがあります。したがって、この「名前」プロパティを操作する単一のテンプレートを作成したいと考えています。私はこの質問の助けを借りてこれを達成することができました:
提案どおり、次のようなディレクティブを作成しました。
app.directive('member', function(){
return {
restrict: 'A',
template: "{{prefix}}<input type='text' ng-model='member.name'>",
scope: {
member: "="
}
};
});
このディレクティブの使用法は次のとおりです。
<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/
これで何が問題になる可能性がありますか?
編集
$parent を使用してプレフィックスにアクセスすることもできます。しかし、これはクリーンなアプローチです。