2017-06-14 3 views
-2

Einfache ng-Klasse Bindung wird nicht ausgelöst, wenn innerhalb einer Funktion aufgerufen wird, wie kann ich das beheben?So ändern Sie den Wert des Bereichs innerhalb einer Funktion - Warum funktioniert mein Code nicht?

$scope.afterHide = function() { 
 
    $scope.inputState = "fade-in"; 
 
}
<label ng-class="inputState">Next statement</label>

+0

Innerhalb 'scope' Optionen' 'my-Show': '=' '' sollte sein 'MyShow': ‚= '' –

+0

Ja .. es gibt tatsächlich eine Menge Fehler beim Einrichten dieser Direktive, aber es ist nicht relevant für meine Frage. Der tatsächliche Fehler ist in: $ scope.afterHide = function() { $ scope.inputState = "Einblenden"; // diese Zeile wird hier nicht aufgerufen WARUM? console.log ('Refresh-Anweisung vollständig ausgeblendet NACHHER'); } – redleome

+0

** Beseitigen Sie alle Probleme, die für das Problem nicht relevant sind. ** Siehe [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (https://stackoverflow.com/help/mcve). – georgeawg

Antwort

1

funktioniert in diesem Beispiel:

angular.module("app",[]) 
 

 
.controller("ctrl", function($scope) { 
 

 
    $scope.afterHide = function() { 
 
     $scope.inputState = "fade-in"; 
 
    }; 
 
    
 
    $scope.reset = function() { 
 
     $scope.inputState = ""; 
 
    }; 
 
});
.fade-in { 
 
    background-color: red; 
 
}
<script src="//unpkg.com/angular/angular.js"></script> 
 
<div ng-app="app" ng-controller="ctrl"> 
 

 
    <label ng-class="inputState">Next statement</label> 
 

 
    <br><button ng-click="afterHide()">Invoke afterHide</button><br> 
 
    <button ng-click="reset()">Reset</button> 
 
</div>


Wenn es funktioniert ich dann Ich denke, es hat etwas mit der Gesamtlogik meines Codes zu tun. Die Funktion $scope.afterHide wird durch ein Ereignis auf einer der Anweisungen ausgelöst, diese Anweisung wird außerhalb des Controllers definiert. In HTML ist es im Grunde nur ein anderes div, das einen Zustand der Veränderung hat. Wenn eine Änderung eintritt, werden andere Elemente auf der Seite ebenfalls beeinflusst. In diesem Kontext ist das andere Element das Label-Tag. Wenn die Änderung erfolgt, wird die $scope.afterHide-Funktion innerhalb der Steuerung durch die Anweisung aufgerufen, die außerhalb der Steuerung definiert ist.

Bereiche sind in einer hierarchischen Struktur angeordnet, die die DOM-Struktur der Anwendung nachahmt.

Die ng-click Richtlinie kann keine Funktion für einen Bereich aufrufen, die außerhalb seiner Hierachie ist. Wenn sich die ng-click-Direktive in einer Vorlage innerhalb einer Direktive befindet, die den isolate-Bereich verwendet, muss das Ereignis außerdem mit dem übergeordneten Bereich mit dem Ausdruck "&" verbunden werden.

Weitere Infomationen finden Sie

+0

Vielen Dank für Ihre Antwort. Wenn es funktioniert, dann denke ich, dass es etwas mit der Gesamtlogik meines Codes zu tun hat. Die Funktion $ scope.afterHide wird durch ein Ereignis in einer der Direktiven ausgelöst. Diese Direktive wird außerhalb des Controllers definiert. In HTML ist es im Grunde nur ein anderes div, das einen Zustand der Veränderung hat. Wenn eine Änderung eintritt, werden andere Elemente auf der Seite ebenfalls beeinflusst. In diesem Kontext ist das andere Element das Label-Tag. Wenn die Änderung eintritt, wird die Funktion $ scope.afterHide innerhalb des Controllers von der Direktive aufgerufen, die außerhalb des Controllers definiert ist. – redleome

+0

Siehe Update zur Antwort. – georgeawg

+0

Das ist genau richtig. Ich habe es jetzt funktioniert, danke dir – redleome

Verwandte Themen