Möglichkeiten, Server-Datum in einer AngularJS-Anwendung zu verwenden

Gibt es eine "nette" Möglichkeit, das Datum des Servers auf eine angularJS App zu setzen?

Lassen Sie uns sagen, dass ich eine API-Route habe, um diese zu bekommen, Art von / api / date und ich kann es mit einem Winkel Service namens dateService:

  • Winkelrichtlinie Vorlage auf Textfeld hinzufügen (Eingabe der Leertaste)
  • AngularJs dynamischer Download von Antwort
  • Standardverhalten, wenn keine anderen Funktionen an ein Versprechen angekettet sind
  • AngularJS dynamische Formularfeldvalidierung
  • So überschreiben Sie $ exceptionHandler-Implementierung
  • NgGrid sortiere die gesamte Ergebnismenge
  • angular.module('myApp').service('DateService', ['$resource', function ($resource) { return $resource('/api/date', { }, { }); }]); 

    Ich muss das Datum bekommen, sobald die App startet, weil meine HTML-Datei eine Funktion verwendet, die auf diesem Datum basiert, um etwas anzuzeigen. Ansonsten bekomme ich immer einen "undefinierten" Fehler, wenn ich ihn anrufe.

    Danke im Voraus

  • Wie man ngClick programmgesteuert auslöst
  • AngularJS-Richtlinien als "benutzerdefinierte" HTML-Tags: Ist das nicht gefährlich und kann mit zukünftigen HTML-Versionen in Konflikt stehen?
  • AngularJS $ http, um externe Javascript-Datei abzurufen
  • Wie kann ich die Winkelversion 1.1.5 über npm installieren?
  • Wie man Array von der Service-Funktion zum Bereich im Controller (AngularJs) übergibt?
  • Wie teste ich eine Richtlinie in Angular 2?
  • 6 Solutions collect form web for “Möglichkeiten, Server-Datum in einer AngularJS-Anwendung zu verwenden”

    Das kannst du in app.run machen

     var app = angular.module('myApp',[]); app.run(function ($rootScope, $state, DateService) { // call date service and save it in $rootScope }); 
    1. Habe der Back-End-Server einen Zeitstempel in UTC zurück.
    2. Parse den Zeitstempelwert mit var date = new Date(serverTimestampValue);
    3. Sie haben jetzt ein JS Date-Objekt, das mit Angular Date Filtern verwendet werden kann.

    Wenn Sie ui-router für das Routing verwenden und wenn Sie den Zeitstempel lernen müssen, bevor Sie irgendetwas zum Benutzer zeigen, können Sie die resolve von ui-Router verwenden. Grundsätzlich löst es, was du brauchst, bevor du einen Staat aktivierst, und wenn du deine Serverzeit in deinem Elternstaat abrufst, kannst du sicher sein, dass du den Zeitstempel hast, bevor irgendetwas in deiner Anwendung beginnt. Hier ist ein Beispiel, wie es geht:

     angular.module("yourApp").config(["$stateProvider", function ($stateProvider) { $stateProvider .state("topState", { abstract: true, template: "<ui-view></ui-view>", controller: ["$rootScope", "serverTimestamp", function ($rootScope, serverTimestamp) { $rootScope.serverTime = new Date(serverTimestamp); //Do what you need to do with the server time, from now on you will have access to server time from each controller in your app. }], resolve: { serverTimestamp: ["", function (bakkalBrandService) { return yourService.retrieveTimestampFromServer(); }] } }) }]) 

    Sie können die Ausführung von Angic-App verzögern, indem Sie sie manuell booten, und nicht die automatische Initialisierung. https://docs.angularjs.org/guide/bootstrap Auf diese Weise können Sie die folgenden Schritte durchführen, um die Server-Einstellungen zu erhalten und sie verfügbar zu haben, wenn Ihre Angic-App gestartet wird.

     //Define a global settings object. add proper namespace as per your app. var myServerConfig = (function () { var settings = { someDefaultSetting: 'someDefaultValue' }; return { init: function (serverSettings) { settings = $.extend(settings, serverSettings); }, settings: settings } })(); //Define angular wrapper for your global object var serverSettings = angular.module('server.settings', []); serverSettings.factory('serverSettings', ['$window', function () { return $window.myServerConfig.settings; }]); //On dom ready get all settings and bootstrap angular app $(document).ready(function () { //You will have to show some animation if you are making ajax call //also if errors out handle that scenario //Other option is to render settings from server on page load as mentioned in other answers $.ajax({ type: 'GET', url: '/api/settings', error: function (error) { //show user message that app cannot be loaded }, success: function (setting) { myServerConfig.init(setting); bootStrapMyApp(); } }); function bootStrapMyApp() { angular.element(document).ready(function () { angular.bootstrap(document, ['myApp']); }); } 
     angular.module('myApp').service('DateService', ['$resource', function ($resource) { this.date = null; var self = this; $resource('/api/date', { }, { }).then(function(data){ self.date = data.date; }); }]); 

    Sie können sie einer Servicevariable zuordnen, nachdem Sie sie erhalten haben.

     angular.module('myApp').service('DateService', ['$resource', function ($resource) { this.date = null; var self = this; $resource('/api/date', { }, { }).then(function(data){ self.date = data.date; }); }]); 

    Dann ruf den Service an, um es zu bekommen, wenn du es brauchst.

     $scope.date = function() { return DateService.date; } 
    Lassen Sie uns Javascript Schönheit und nützlich machen.