Chciałbym podać alias modelu używanego w szablonie, aby ten sam szablon mógł być ponownie użyty dla różnych modeli. Na przykład w następującym modelu:Aliasing modelu w ngtemplate
member = {
name: "Member1",
children:[
{
name:"Child1"
},
{
name:"Child2"
}
]
}
zarówno "członek", jak i "dzieci" mają własność "nazwa". Dlatego chcę stworzyć pojedynczy szablon manipulujący tą właściwością "nazwa". udało mi się to osiągnąć za pomocą tego pytania:
Bind ngInclude to different models
Jak sugeruje, stworzyłem dyrektywy, takich jak:
app.directive('member', function(){
return {
restrict: 'A',
template: "{{prefix}}<input type='text' ng-model='member.name'>",
scope: {
member: "="
}
};
});
Po to jest korzystanie z niniejszej dyrektywy:
<div ng-controller="MemberCtrl">
{{member | json}}
<div member="member"></div>
<div member="member.children[0]"></div>
</div>
Byłem w stanie osiągnąć ponowne wykorzystanie szablonu, jednak ponieważ używam "zakresu" w mojej dyrektywie, to stworzyło isola zakres, który nie jest w stanie uzyskać dostępu do żadnej właściwości zakresu kontrolera. Tak więc dla kontrolera:
app.controller('MemberCtrl', function($scope){
$scope.member = {
name: "Member1",
children:[
{
name:"Child1"
},
{
name:"Child2"
}
]
};
$scope.prefix = "Mr.";
});
Szablon wewnątrz dyrektywy nie może uzyskać dostępu do właściwości "prefix". Poniżej znajduje się jsfiddle:
http://jsfiddle.net/vaibhavgupta007/mVBaC/1/
Co może być problemem w tym?
Edit
mogę również użyć $ rodzica dostęp do prefiksu. Ale czy to jest czyste podejście.
Tak, to jest jedno podejście, ale w jaki sposób wystawić zakres kontrolera na dyrektywę, aby mógł on również uzyskać dostęp do niektórych funkcji pomocnika. Na przykład, jeśli kontroler ma funkcję o nazwie "joinNameWithPrefix" w zakresie, dyrektywa nie będzie mogła uzyskać do niej dostępu. – Vaibhav
W takim przypadku można całkowicie pominąć "zakres" z obiektu definicji dyrektywy, a dyrektywa nie będzie tworzyła izolowanego zakresu, ale zamiast tego domyślnie będzie używać zakresu nadrzędnego. – Stewie
Ale wtedy nie będę w stanie osiągnąć aliasingu. Wygląda na to, że mam problem z kurczakiem i jajkiem ... :) Myślę, że aliasing nie jest obsługiwany w angularjs w prosty sposób. Będę musiał użyć $ parent w szablonie. – Vaibhav