GWorking
GWorking

Reputation: 4341

Angularjs -> how to initialise variables in angular-style

I am trying to re-write an application using angular.js, but I still do not see how it works (more or less).

For instance. In my previous code, I had a function that was executed once everything was loaded that initialised variables, accessed for everyone in a window.variable style.

Now I want the same here.

My idea was to build a factory to return an object with all the variables, and then make that everyone had access to this object (somehow).

The questions are: 1- Am I right? I should initialise variables through a factory? 2- And how can I "call" this factory-method at the beginning of the code? with the module.run function?

Cheers,

Upvotes: 0

Views: 178

Answers (3)

user1364910
user1364910

Reputation:

I'd probably put the variables in a service, and then inject that into a wrapping angular controller. Any other controllers that you would want to have access to these 'global' variables would be nested under the wrapping controller, thus inheriting the variables.

var app = angular.module("app", []);

app.service("globVars", function () {
  var vars = {};
  vars.someVar = "a";
  vars.someOtherVar = "b";
  return vars;
});

app.controller("WrappingCtrl", function ($scope, globVars) {
  $scope.globVars = globVars;
});

app.controller("NestedCtrl", function ($scope) {
  console.log($scope.globVars.someVar); // => "a"
});


<html ng-app="app">
  <div id="wrapper" ng-controller="WrappingCtrl">
    <div class="nested" ng-controller="NestedCtrl">
      {{globVars.someVar}}
    </div>
  </div>
</html>

Upvotes: 1

Farkhat Mikhalko
Farkhat Mikhalko

Reputation: 3645

If you want to access some variables, you must see to $rootScope, because you can access $rootScope everywhere.

Also you must use angular config and run functions.

I advice to you don't use global scope, because it affects on app speed, memory leaks etc.

Upvotes: 1

doodeec
doodeec

Reputation: 2927

I think you should avoid using global variables as much as you could

But if you have to use them, you are right, you can initialize them in module.run and add the module in the app dependencies

Upvotes: 1

Related Questions