Gewusst wie: übergeben von Parametern gerendert aus backend zu angular2 bootstrap-Methode
Gibt es eine Möglichkeit, Argumente übergeben, die die Darstellung auf das backend zu angular2 bootstrap-Methode? Ich möchte set http-header für alle Anfragen, die mit BaseRequestOptions mit dem Wert aus dem backend. Meine main.ts
- Datei sieht wie folgt aus:
import { bootstrap } from '@angular/platform-browser-dynamic';
import { AppComponent } from "./app.component.ts";
bootstrap(AppComponent);
Fand ich wie übergeben Sie diese Argumente, um root-Komponente (https://stackoverflow.com/a/35553650/3455681), aber ich brauche es, wenn ich fireing bootstrap
Methode... Irgendwelche Ideen?
edit:
webpack.config.js Inhalt:
module.exports = {
entry: {
app: "./Scripts/app/main.ts"
},
output: {
filename: "./Scripts/build/[name].js"
},
resolve: {
extensions: ["", ".ts", ".js"]
},
module: {
loaders: [
{
test: /\.ts$/,
loader: 'ts-loader'
}
]
}
};
InformationsquelleAutor Bodzio | 2016-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
update2
Plunker Beispiel
update AoT
Arbeiten mit AoT die Fabrik Schließung muss verschoben werden, aus
Siehe auch https://github.com/angular/angular/issues/11262
update ein RC.6 und 2.0.0 Letzte Beispiel
Wenn es keine Notwendigkeit zu warten, bis die Initialisierung abgeschlossen, wird der Konstruktor von `class AppModule {} kann auch verwendet werden:
Hinweis (zyklische Abhängigkeit)
Beispielsweise die Injektion der router kann die Ursache für zyklische Abhängigkeiten.
Zu umgehen, injizieren die
Injector
bekommen und die Abhängigkeit vonstatt Injektion
MyDependency
direkt wie:update
Diese sollte die gleiche Arbeit in der RC.5, aber stattdessen fügen Sie den Anbieter, um
providers: [...]
des root-Modul stattbootstrap(...)
(selber noch nicht getestet).
update
Einen interessanten Ansatz, es zu tun, ganz im inneren Winkel-hier wird erklärt, https://github.com/angular/angular/issues/9047#issuecomment-224075188
original
Können Sie es mit Angulars dependency injection:
oder bieten Sie vorbereitet
BaseRequestOptions
direkt wie<script> function() { window.headers = someJson; }()</script>
. Nicht sicher über die syntax, ich bin nicht mit JS viel selbst. Diese Weise werden Sie nicht haben, zu analysieren, zu allen.Ausgezeichnete Lösung, nur ein paar Hinweise für zukünftige Googler wie mich: 1) Beachten Sie, dass
load()
muss wieder einPromise
, nicht einObservable
. Verwenden Sie die.toPromise()
Funktion hier, wenn Sie mit den Observablen, die in Ihrem Dienst wie ich bin. 2) Sie Fragen sich vielleicht, wie Sie den Wert abrufensites.load()
abgerufen in Ihren Diensten, Komponenten, etc. Beachten Sie, dassSitesService
weist esthis.current
. So brauchen Sie nur zu injizierenSitesService
in Ihre Komponenten und abrufen dercurrent
EigenschaftGute Lösung, aber wenn ich Baue mein Projekt frisch bekomme ich die Fehlermeldung: "FEHLER-Fehler beim auflösen von symbol Werte statisch. Funktionsaufrufe werden nicht unterstützt. Betrachten Sie ersetzen die Funktion oder ein lambda-Ausdruck mit einem Verweis auf eine exportierte Funktion (position 24:46 im original .ts-Datei), auflösen von symbol AppModule in .../src/app/app.- Modul.ts". Ich glaube, es zeigt auf den lambda-Ausdruck in useFactory. Wie würden Sie übersetzen die oben genannten lambda-Ausdruck eine exportierte Funktion? Ist die Funktion einfach als ein wrapper?
Mit AoT müssen Sie sich zu bewegen
() => sites.load()
einer Funktion (außerhalb der Klasse und Lackierer) und dann in den Anbieter ersetzt es durch die Funktion namedanke, ich habe versucht, wie Sie vorgeschlagen, aber bekomme den gleichen Fehler. Aber vielleicht bin ich nicht nach auch. Können Sie werfen Sie einen Blick auf meine Frage: stackoverflow.com/questions/42998892/...
InformationsquelleAutor Günter Zöchbauer
In Angular2 endgültige Version, die APP_INITIALIZER provider kann verwendet werden, um zu erreichen, was Sie wollen.
Schrieb ich eine Zusammenfassung mit einem kompletten Beispiel: https://gist.github.com/fernandohu/122e88c3bcd210bbe41c608c36306db9
Das wesentliche Beispiel ist das Lesen von JSON-Dateien, kann aber leicht geändert werden, zu Lesen von einem REST-Endpunkt.
Was Sie brauchen, ist im Grunde:
a) einrichten APP_INITIALIZER in Ihrer vorhandenen Modul-Datei:
Diese Zeilen rufen Sie die load () - Methode aus BackendRequestClass Klasse, bevor die Anwendung gestartet wird.
Stellen Sie sicher, dass Sie "HttpModule" in "Importe" Abschnitt, wenn Sie wollen, um http-Aufrufe an das backend mit angular2 eingebauten Bibliothek.
b) Erstellen Sie eine Klasse und den Namen der Datei "backend.Anfrage.ts":
c) Lesen Sie den Inhalt der backend aufrufen, die Sie gerade brauchen, um zu injizieren, die BackendRequestClass in jeder Klasse Ihrer Wahl und rufen Sie getResult(). Beispiel:
Lassen Sie mich wissen, ob dies Ihr problem löst.
beachten Sie, dass die factory-Funktion nicht wieder eine Funktion ist, gibt es eine Funktion, die eine Zusage zurückgibt. Dies war die Ursache, dass appInits[i] Fehler bei mir.
Ich habe die exakt gleiche Fehler. Gelöst, indem der zusätzliche
() =>
für useFactoryVersuchen, die gleichen Schritte in angular4 aber es funktioniert nicht, kein Fehler mit keine Daten angezeigt wird, auf Ansicht
InformationsquelleAutor computeiro
Anstatt Ihre Einstiegspunkt den Aufruf von bootstrap selbst erstellen könnte und eine Funktion exportieren, die die Arbeit macht:
Könnten Sie auch diese Funktion auf das Globale Objekt, je nach Einstellung (webpack/SystemJS). Es ist auch AOT-kompatibel.
Dies hat den Vorteil, zu verzögern, die bootstrap, die whenit Sinn macht. Zum Beispiel, wenn Sie diesen Benutzer abrufen von Daten als ein AJAX-Aufruf, nachdem der Benutzer füllt ein Formular aus. Rufen Sie die exportierte bootstrap-Funktion mit diesen Daten.
injizieren Params auf einem injizierbaren element
In meinem Fall war dies die bessere option. Ich wollte manuell kick-off der laden der app durch ein anderes Ereignis auf der Seite, und das hat Super geklappt
InformationsquelleAutor André Werlang
Der einzige Weg, dies zu tun ist, um diese Werte bei der Definition Ihrer Anbieter:
Dann können Sie diese Parameter in Ihrem
CustomRequestOptions
Klasse:Wenn Sie diese Parameter von einem AJAX-request, müssen Sie bootstrap asynchron auf diese Weise:
Siehe diese Frage:
Bearbeiten
Da haben Sie Ihre Daten in die HTML können Sie die folgenden.
Können Sie importieren Sie eine Funktion mit Parametern aufrufen.
Hier ist ein Beispiel, das main-Modul-bootstraps der Anwendung:
Dann können Sie importieren es aus Ihrer HTML-Haupt-Seite wie diese:
Siehe diese Frage: Pass Konstante Werte zu Eckig aus _layout.cshtml.
Was meinst du genau damit meinst Rendern? Generieren Sie Ihre Haupt-HTML-Datei / JS-Dateien vom server? Führen Sie einen AJAX-request, um diese Parameter?
Ich Generiere meine Ansichten vom server. Ich dachte, ich render alle erforderlichen Parameter auf der backend-Seite wie diese:
{"token": "@User.Token", "xxx": "@User.Yyy"}
so im gerenderten HTML habe ich{"token": "123abc456def", "xxx": "yyy"}
. Und ich will irgendwie pass dieser gerendert JSON-in-bootstrap-Methode, die ich in .js-Datei.Gibt es eine Möglichkeit zu laufen, ohne das SystemJS (ich bin mit der webpack-und entry-point definiert ist im webpack.config-Datei)
Ich bin kein webpack Experte, aber ich könnte versuchen... Könnte man hinzufügen, den Inhalt Ihrer webpack.config-Datei? Danke!
InformationsquelleAutor Thierry Templier