Tristan
Tristan

Reputation: 2078

Getting $scope object in Angular's run() method

I'd like to do some stuff when my app loads to set up the default state. So I'm trying to use the run method on the Module object. When I try to access the $scope variable though I get an "Uncaught ReferenceError: $scope is not defined" message in my console.

See the following example http://jsfiddle.net/F2Z2X/1/

app = angular.module('myapp', []);

app.controller('mycontroller', function($scope){
    $scope.data = { myvariable: 'Hello' };
});

app.run(
    alert($scope.data.myvariable))
);

Am I going about this all wrong?

For example, I want to run the watchAction function once at the beginning, to hide UI elements that aren't called for yet, but the watchAction function doesn't have the $scope object because it's not being called by the watch method so I have to pass it to it, but alas it's not available.

Upvotes: 37

Views: 44984

Answers (2)

Shekkar
Shekkar

Reputation: 244

var app = angular.module('myApp', []);
app.run(function ($rootScope) {
    // use .run to access $rootScope
    $rootScope.rootProperty = 'root scope';
});

app.controller("ParentCtrl", ParentCtrlFunction);
app.controller("ChildCtrl", ChildCtrlFunction);
function ParentCtrlFunction($scope) {
    // use .controller to access properties inside ng-controller
    //in the DOM omit $scope, it is inferred based on the current controller
    $scope.parentProperty = 'parent scope';
}
function ChildCtrlFunction($scope) {
    $scope.childProperty = 'child scope';
    //just like in the DOM, we can access any of the properties in the
    //prototype chain directly from the current $scope
    $scope.fullSentenceFromChild = 'Same $scope: We can access: ' +
    $scope.rootProperty + ' and ' +
    $scope.parentProperty + ' and ' +
    $scope.childProperty;
}  

for Eg. https://github.com/shekkar/ng-book/blob/master/7_beginning-directives/current-scope-introduction.html

It is simple flow ,we have rootScope,parentScope,childScope .in each section we are assigning the corresponding scope variables.we can access the $rootScope in parentScope, rootScope and parentScope in childScope.

Upvotes: 3

Umur Kontacı
Umur Kontacı

Reputation: 35478

app.run(function ($rootScope) {
    $rootScope.someData = {message: "hello"};
});

You can only get $rootScope injected to services and run function, because each child scope is inherited from its parent scope and the top level scope is rootScope. Since it would be ambigous to inject any scope. Only root scope is provided.

Upvotes: 78

Related Questions