Jeśli chodzi o dyrektywy AngularJS, natknąłem się na sytuację, w której wzywam dyrektywę z innej dyrektywy i mam następujące pytania.Zagnieżdżanie dyrektyw w dyrektywach
- Dlaczego nie mogę odwoływać się do scope.bindValue w funkcji mojego linku? Czy istnieje sposób można obliczyć wartość z scope.bindValue i ustawić go na zakres?
- Dlaczego można powiązać subdirective za pomocą "@" w zakresie: {}, ale nie używać scope.value = attrs.value w funkcji łącza?
Wszystko poniżej można zobaczyć na http://jsfiddle.net/sdg9/AjDtt/13/
HTML:
<directive bind-value="12" value="7"></directive>
JS:
var myApp = angular.module('myApp', []);
var commonTemplate = '<div>{{name}} bind-value is: {{bindValue}} </div><div>{{name}} value is: {{value}} </div><div>{{name}} add one to bind-value is: {{addOneBindValue}} </div><div>{{name}} add one to value is: {{addOneValue}} </div><br/>';
myApp.directive('directive', function() {
return {
scope: {
bindValue: "@",
},
template: commonTemplate + '<br/><sub-directive bind-value="{{value}}" value="{{value}}"></sub-directive>',
restrict: 'E',
link: function (scope, element, attrs) {
scope.name = "Directive";
scope.value = attrs.value;
scope.addOneBindValue = parseInt(scope.bindValue) + 1;
scope.addOneValue = parseInt(scope.value) + 1;
}
};
});
myApp.directive('subDirective', function() {
return {
scope: {
bindValue: "@"
},
template: commonTemplate,
restrict: 'E',
link: function (scope, element, attrs) {
scope.name = "SubDirective";
scope.value = attrs.value;
scope.addOneBindValue = parseInt(scope.bindValue) + 1;
scope.addOneValue = parseInt(scope.value) + 1;
}
};
});
wyjściowa:
Directive bind-value is: 12
Directive value is: 7
Directive add one to bind-value is: null <--- why?
Directive add one to value is: 8
SubDirective bind-value is: 7
SubDirective value is: <--- why?
SubDirective add one to bind-value is: null
SubDirective add one to value is: null
Dzięki temu udało się uzyskać tę operację za pomocą attrs. $ Observe(). Pozostanę przy użyciu "@" w podkatalogu, ponieważ powinno to wystarczyć dla moich scenariuszy. http://jsfiddle.net/sdg9/AjDtt/16/ – Steven
@Steven, tworzyłem skrzypce w tym samym czasie co ty :) W moim skrzypcach pokazuję również, jak uzyskać 'wartość' w pod-przewodniku. Zaktualizowałem również moją odpowiedź, dodając trochę więcej informacji. –
w odniesieniu do "Jeśli wartości atrybutów są stałe," @ "prawdopodobnie nie powinno być używane", co z tym, kiedy zagnieżdżam dyrektywy? Moja zewnętrzna dyrektywa może wyglądać jak, ale ponieważ używa szablonu templateURL, wywołuje moją dyrektywę podrzędną za pomocą atrybutu interpolowanego. Czy to jest prawidłowe użycie szablonuURL, czy też powinienem samemu konstruować ten element poprzez angular.element i dodawać go do szablonu? Później wydaje mi się, że mam dużo dodatkowej pracy, aby uniknąć atrybutów interpolowanych. –
Steven