2012-09-28 6 views
19

że mam następujący jako część mojego directive definicję:Czy istnieje sposób podania wartości domyślnej dla pojedynczego aliasu zakresu?

scope: { 
    prop1: '@' 
} 

Czy jest jakiś sposób na PROP1 aby uzyskać wartość domyślną, jeśli dyrektywa nie posiada atrybut PROP1? Oczywiście, mogę sprawdzić, czy jest on zdefiniowany i ustawić go, ale the property isn't always set when you would expect. Zastanawiam się tylko, czy w dokumentacji brakuje jakiejś składni, lub czy istnieje dobry standardowy sposób robienia tego. Dzięki.

Odpowiedz

19

To zależy od domyślnej wartości, którą chcesz przypisać. Jeśli chcesz domyślnie nazwę w zakresie dominującej, ustawienie domyślne wartości atrybutu w compile funkcji tej dyrektywy będzie działać:

 
    compile: function(element, attrs) { 
    if (attrs.person == undefined) { 
     attrs.$set("person", "person"); 
    } 
    ... 

Jeśli chcesz dyrektywa dostarczyć wartość domyślną, to robi się trochę tricker jako Angular nie pozwoli Ci przypisać do aliasu w zakresie izolatu (otrzymasz wyjątek "Niepowtarzalne wyrażenie modelu" od obserwatora, który próbuje propagować przypisanie do izolowanego zakresu nadrzędnego). Można temu zapobiec, zaznaczając atrybut jako opcjonalny (co oznacza, że ​​Angular nie zarejestruje odbiornika, gdy właściwość zostanie pominięta).

 
    scope: { 
    person: "=?" 
    }, 
    link: function(scope, element, attrs) { 
    if (scope.person == undefined) { 
     scope.person = "Bob"; 
    } 
    ... 
    } 
+1

Nigdy wcześniej nie widziałem notacji '?' W właściwości scope. Czy jest jakieś miejsce, które jest udokumentowane? Lub skrzypce, które pokazują, że działa? – dnc253

+0

https://github.com/angular/angular.js/commit/ac899d0da59157fa1c6429510791b6c3103d9401 – epeleg

+1

Dwie rzeczy: 1) użyj 'angular.isUndefined (...)' and 2) jest to udokumentowane tutaj: https: //docs.angularjs. org/api/ng/service/$ compile # dyrektywa-definicja-obiekt – icfantv

-3
scope['prop1'] = scope['prop1'] || '@' 
+0

Widzę, że działa w ogólnym sensie javascript, ale to pytanie jest dla specyficznego definiowania dyrektywy z AngularJS. Nie rozumiem, jak mogłem użyć tej samej koncepcji. – dnc253

+0

angle spowoduje błąd, jeśli spróbujesz wykonać tę składnię z opcjonalną flagą "?". zastosuj powyższe rozwiązanie przez @niall. – icfantv