Używam 1.5 składników, ale nie sądzę, żeby to miało znaczenie.Funkcja szablonu nie interpolująca wiązań komponentów
Próbuję wykonać pojedyncze powiązanie =
między kontrolerem nadrzędnym a zakresem izolowanym dyrektywy potomnej. Zakres izolowania podrzędnego interpoluje wiązanie dosłownie; zamiast vm.data
interpolacji do danych, które zdefiniowałem w kontrolerze, wypada dosłownie vm.data
jako ciąg znaków.
Jeśli spróbuję połączyć w jedną stronę z @
, to ponownie wartość "interpolowana" da się dosłownie {{vm.data}}
.
Jak mogę uzyskać ciąg zdefiniowany w kontrolerze nadrzędnym w szablonie komponentu podrzędnego?
angular
.module('app', [])
.controller('Ctrl', function() {
this.str = '<0>, blah, <1>';
})
.component('appComponent', {
restrict: 'E',
controller: 'Ctrl as vm',
template: '<div><app-str appstr-data="{{vm.str}}"></app-str></div>'
})
.component('appStr', {
bindings: { appstrData: '@' },
restrict: 'EA',
template: function($element, $attrs) {
console.log($attrs.appstrData)
return '<span>'+$attrs.appstrData+'</span>';
}
});
https://plnkr.co/edit/VWVlhDbhP2uDRKtXJZdE?p=preview
@Daniel_L zobaczyć podczas uzyskiwania dostępu atrybut komponentu nadrzędnego, nie można dostać "oceniono" wiązanie 'atrybut'..n ow sprawie modyfikowania wartości przed związaniem, nie sądzę, że to będzie miało jakąkolwiek różnicę.Nawet można sformatować tę wartość z komponentu potomnego –
Hmm, widzę, zauważyłem, że nie byłem w stanie uzyskać dostępu do wartości oszacowanej atrybutu binded. Moim celem było zastąpienie '<0>' elementem html. W wersji 1.4 użyłbym metody 'link', ale jeśli nie jest ona dostępna w wersji 1.5, nie jestem pewien co robić. –
faktycznie mam to działa przy użyciu fabryki, która używa usługi '$ sce'. –