Ich habe viele Fragen zu diesem Thema im Zusammenhang gesehen, aber keine Lösung, die ich versucht habe, funktioniert:Aufruf eine AngularJS Funktion von außerhalb des Geltungsbereichs eines Angular App
im Ordner public ich eine Datei namens app Js, wo ich meine AngularJS Anwendung wie folgt definieren:
var app = angular.module('app', []);
var RectangleDim=30;
app.controller('MainCtrl', function($scope, $http) {
und am Ende der Datei muss ich den Bootstrap wie:
angular.bootstrap(document.getElementById('body'), ["app"]);
Dann im gleichen Ordner und innen t er HTML mein Einstiegspunkt für die Anwendung von AngularJS ist wie folgt:
<div id="body">
<div ng-controller="MainCtrl">
<div class="col-sm-6 col-md-6 col-lg-6" style="background-color: #D2D7D3">
<div style="padding:25px;">
Dann auf einem anderen Ordner, ich habe eine andere JS-Datei, wo ich anrufen müssen, um eine bestimmte Funktion, die in dem AngularJS Code definiert ist. Die Funktion heißt Draw() und wird ausgelöst, wenn ich auf eine AngularJS-Taste klicke.
einfach Um die Funktion innerhalb einer anderen Datei aufrufen auf eine beliebige Taste, ohne klicken ich so etwas wie dies tue:
var e = document.getElementById('body');
var scope = angular.element(e).scope();
// update the model with a wrap in $apply(fn) which will refresh the view for us
scope.$apply(function() {
scope.Draw(NumQuest);
});
//fim
EDIT: Um meine Frage etwas klarer zu machen, habe ich vielleicht ein hinzufügen einige weitere Details:
Ich brauche nur einen Controller und ein einzelnes Modul, das meine gesamte Anwendung steuert, weil alle erforderlichen Aktionen (die 3 Funktionen aufrufen, die ein SVG-Bild aktualisieren) relativ in sich abgeschlossen sind. Ich denke, es besteht die Notwendigkeit, dem clientseitigen Code Komplexität hinzuzufügen, die nur verwirren könnte Ich und andere Leute, die mit mir arbeiten.
zu erinnern, was ich brauche:
Innerhalb einer einzigen Anwendung, mit einem Controller, I eine Funktion haben, Draw (someInputValue), dass eine SVG-Figur erzeugt. Die Eingabe für diese Funktion wird von einem Texteingabefeld empfangen.
In einer anderen Datei habe ich JS-Aktionen, die ausgeführt werden, wenn ich auf ein anderes Textfeld klicke (z. B. eine Warnung anzeigen oder ein zusätzliches Textfeld erstellen). Ich möchte einen Aufruf von Draw (Eingabe) verbinden, wenn ich auf das Textfeld klicke.
Ich möchte nämlich das Verhalten simulieren, das ich habe, wenn ich auf eine Schaltfläche klicke, die eine Zahl aus einem Textfeld liest und einige Aktionen ausführt, statt die Eingabe per Hand in ein Textfeld einzugeben und zu klicken auf eine Schaltfläche möchte ich einfach auf ein Textfeld klicken und die gleiche Aktion ausführen.
Mit dem Abruf einen Winkelumfang durch ein DOM-Element greifen ist ein Code Geruch, dass Sie vielleicht nicht eckig richtig verwenden . Gibt es einen bestimmten Grund für diese Architektur (d. H. Warum ist diese andere Datei keine Winkelkomponente)? – doldt
Hinzufügen eines Kommentars und Hochstimmen zu @doldt. Es empfiehlt sich, Code-Gerüche zu beachten. Normalerweise, wenn etwas wirklich hässlich zu lösen ist, ist es außerhalb der generischen Design-Prinzipien und man sollte sehr vorsichtig sein, diesen Weg zu gehen. Kann das nicht genug betonen daher der zusätzliche Kommentar. Für zukünftige Leser dieses Themas, erklären Sie, warum Sie das wirklich brauchen? Keine anderen Designlösungen? – bastijn
Was möchten Sie hier erreichen, indem Sie Angular verwenden, um "Angular" nicht zu verwenden? – Claies