Tengo una aplicación angular donde en mi index.html tengo una variable dentro de una etiqueta, como esta:
<script type="text/javascript"> let global = 5; </script>Necesito leer y editar el valor de esta variable, dentro de un componente angular, pero no se como hacerlo.
Vi que es posible leer el valor si crea la variable dentro del objeto "ventana" de javascript (window.global = 5) y luego la usa en el componente angular, pero creo que no me funcionaría porque necesito que la variable esté afuera, como se especificó arriba.
¿Es posible? ¿Algunas ideas?
La palabra clave declare al rescate: primero, declare su global con var ( let no funciona)
<script type="text/javascript"> var someVar = 5; </script>y acceda a él en, digamos, componente Angular:
declare var someVar; // ... this.foo = someVar;https://stackblitz.com/edit/angular-ivy-zjpnzq?file=src%2Fapp%2Fhello.component.ts
Finalmente usé una aproximación de la respuesta de @robin-zigmond . Cambié let a var en la etiqueta del script y en mi componente angular accedo a la variable usando:
window["global"]Puedo editar el valor dentro de un componente usando, por ejemplo:
window["global"] = 6Además, probé la respuesta de @mbojko y también funcionó.
Puede pasar la ventana variable al alcance en su controlador.
<!DOCTYPE html> <html> <script>window.HELLO_MSG = 'Hello,';</script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <body> <div ng-app="myApp" ng-controller="myCtrl"> {{ wlcmMsg + " " + firstName + " " + lastName }} </div> <script> var app = angular.module("myApp", []); app.controller("myCtrl", function($scope) { $scope.wlcmMsg = window.HELLO_MSG; $scope.firstName = "John"; $scope.lastName = "Doe"; }); </script> </body> </html>O puede inyectar todo el objeto de la ventana como aquí: ¿Cómo inyectar una ventana en un servicio?