简体   繁体   中英

AngularJS variable accessible from the whole code

as you can see I have opened .xml file and parsed it to a xmlDoc. What I am trying to achieve is that this xmlDoc will be accessible from the whole script(I want to make some functions later which will be displaying elements from .xml to a screen). I searched the web and find that it is possible via global variable $rootScope but couldn't implement it correctly. I hope you guys can help me. Thanks.

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<body ng-app="myApp">
    <p id="title">asd</p>
    <button name="opt1" ng-click="">YES</button>
    <button name="opt2" ng-click="">NO</button>

<script>

var app = angular.module('myApp', []);
var parser, xmlDoc;
app.run(function($rootScope, $http) {
    text = $http.get("file.xml").then(function(response) {
        return response.data;
    }).then(function(text) {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(text,"text/xml");
        document.getElementById("title").innerHTML = 
        xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
    });
});

</script>
</body>
</html>

There are many ways in angular to declare and use a global variable. examples: 1. By using $rootScope. we need to add a dependency in our controller or service like:

app.controller('myCtrl', ['$rootScope', '$scope', function($rootScope, $scope){
      $rootScope.yourVar = 'YourValue';
      ....
      ....
   }]);

and then You can use this `yourVar` variable anywhere in your code.

Another way is by using angular factory or servive .

app.factory('factoryObj', ['$scope', function($scope){
    let factoryObj.yourVar = 'yourValue';

    return factoryObj;
 }]);

Now in any controller or any other service, by using this factoryObj as a dependency and then inside that controller or service we can use factoryObj.yourVar as a variable. as:

app.controller('myCtrl',['$rootScope','$scope','factoryObj'function($rootScope,$scope, factoryObj){

  console.log('factoryObj.yourVar value: ',factoryObj.yourVar);

}]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM