2016-06-01 12 views
0

Ich erstelle eine Direktive, die Daten aus Attributwert verarbeiten. Die Direktive wird nur als Attribut für ein Element verwendet. So jetzt möchte ich eine Funktion läuft nur, wenn es so genannt wirdAngularjs: benutzerdefinierte Richtlinie Bereich ist undefined

Die Richtlinie Aufruf ist:

<div rest="accounts"> 
    {{testing}} 
</div> 

Richtlinie Definition lautet wie folgt:

app.directive("rest", [function(){ 
    return { 
     restrict: 'A', 
     scope: { 
      rest: '=' 
     }, 
     link: function(scope, element, attrs, ctrl) { 
      console.log(scope); 
     } 
    }; 
}]) 

jedes Mal wenn ich die Richtlinie verwenden , das Protokoll zeigt die Eigenschaft rest als undefined .. Konten ist nur eine Zeichenfolge, weil ich die Richtlinie zuerst testen möchte, aber ich weiß nicht, warum es immer undefiniert ist, auch mit $watch wie folgt:

+0

"Konto" muss undefiniert sein, bevor es der Richtlinie übergeben wird. Wie ist es initialisiert? – sp00m

+0

sind Accounts, die an den übergeordneten Controllerbereich angehängt sind? $ scope.accounts? –

+0

@RocoCTZ "accounts" ist nur eine Zeichenfolge. es ist keinem Bereich beigefügt – nosthertus

Antwort

1

Die Methode, die Sie zum Übergeben von Werten verwenden, übergibt einen Variablenverweis anstelle eines Zeichenfolgenwerts.

Mit rest="accounts" im HTML, = in Rahmen impliziert Zweiweg Bindung, wobei die innere Eigenschaft scope.rest$scope.accounts an die äußeren Eigenschaft gebunden ist.

Wenn Sie immer beabsichtigen, eine Zeichenfolge zu übergeben, sollten Sie stattdessen @ in der Bereichseigenschaft verwenden. Dies impliziert eine einseitige Bindung zwischen rest und dem Zeichenfolgenwert.

Sie können die Direktive auch wie geschrieben verwenden, ohne $scope.accounts zu definieren, indem Sie Ihren Wert als String-Literal angeben, d. H. rest="'accounts'". Dieses Formular sollte aufgrund der umständlichen Art der verschachtelten Anführungszeichen jedoch sparsam verwendet werden.

Verwandte Themen