2016-07-13 2 views
-1

Ich habe mehr als 10 verschiedene Direktive Fragen untersucht und keiner hat für mich bisher funktioniert. Ich versuche, mein Controller zu erkennen site.selectedUnit hat sich geändert, die selectedChannel in meiner benutzerdefinierten Anweisung aktualisiert. Das erste Mal funktioniert super, aber danach ändert der ng-click nicht die Ansichtsinfo. Die selectedChannel ist registriert und auf meinem ChatList-Controller gespeichert, aber die http-Anfragen werden nicht erneut aufgerufen.Richtlinie Update dann ausführen Abfrage zu Update Dom on Click

Wenn ich auf eine Einheit in site.html klicke, ändert sich der selectedChannel für die Einheitennummer in der chatList-Ansicht, also nehme ich an, dass die http-Anfragen nicht erneut aufgerufen werden.

Wie füge ich einen Listener zu der Direktive oder meinem ChatList-Controller hinzu, damit ich die http-Anfragen erneut aufrufen kann, wenn sich selectedChannel ändert?

+0

Sie haben uns zu viele Fragmente gegeben und wichtige Teile des Codes wie der Controller für site.htm weggelassen l, die Vorlage für die Richtlinie ('views/chatList.html'). Ich denke, dass Sie hier mehr als ein Problem haben, wie eine Variable namens "vm" in Ihrem Controller zu referenzieren, die nie definiert wurde und diese Zuweisung "controller: 'ChatListController als chatList'" in Ihrer Anweisung verwendet, die "controller: 'ChatListController' sein sollte , controllerAs: 'chatList' ". Das ist nur das Offensichtliche, ohne den anderen relevanten Code zu sehen. Ich würde vorschlagen, einen Plunder mit deinem Code einzurichten und zu teilen. – jbrown

+0

Es gibt nichts Relevantes in meinem Site-Controller, das mit der Direktive anders als einer HTTP-Anfrage interagiert, die das Einheiten-Array auffüllt. Ich werde die Ansichten/chatList.html hinzufügen, aber die wichtigsten Probleme sind in den drei aufgelisteten Dateien. Beide "Controller: 'ChatListController als ChatList'" und "Controller: 'ChatListController', ControllerAs: 'ChatList'" funktionieren beim Einrichten einer Direktive. Ich habe mit beiden gearbeitet. –

+0

Ihr Site-Controller ist relevant, denn wenn site.selectedUnit im Controller deklariert ist, erhalten Sie andere Ergebnisse, als wenn dies nicht der Fall ist. – jbrown

Antwort

1

Best I aus dem Code kann sagen Sie zur Verfügung gestellt haben, müssen Sie

site.controller

hinzufügen Definition für $ scope.site sonst ein paar Änderungen machen site.selectedUnit wird nur in dem Kontext verfügbar sein, in dem es im HTML via ng-click definiert ist.

$scope.site = { 
    selectedUnit: null 
}; 

chatList.directive

das Isolat Rahmen entfernen und die selectedChannel Eigenschaft über bindToController injizieren, so dass es in der Steuerung zugänglich sein wird.

.directive('chatList', function() { 
    return { 
    restrict: 'E', 
    bindToController: { 
     selectedChannel: '=' 
    }, 
    templateUrl: 'chatList.html', 
    controller: 'ChatListController', 
    controllerAs: 'chatList' 
    }; 
}) 

chatList.controller

Uhr für Änderungen selectedChannel.id zu Ihrem $ http.get() aufrufen, machen

vm.tenants = []; 

$scope.$watch(angular.bind(vm.selectedChannel.id, function() { 

    // make http.get call here 
})) 

Sie haben auch andere Probleme, die zu viele um zu listen, hier ist eine funktionierende plunker

+0

Der $ scope. $ Watch war was ich brauchte. Ich war mir nicht sicher, ob ich das in meiner Anweisung oder in meinem Controller brauchte, aber nach der Umsetzung all Ihrer Vorschläge war das der Fall. Danke für die Hilfe. Das war eineinhalb Arbeitstage, bis ich soweit war. Ich weiß, dass es mit meinem Post nicht einfach war, mit ihm zu arbeiten, aber du hast mir wirklich geholfen. –

+0

Gern geschehen. – jbrown