2013-06-28 12 views
35

Chciałbym zrobić kilka rzeczy, gdy moja aplikacja ładuje się, aby ustawić domyślny stan. Próbuję użyć metody run w obiekcie Module. Podczas próby uzyskania dostępu do zmiennej $ scope pojawia się komunikat "Uncaught ReferenceError: $ scope is defined defined" w mojej konsoli.

patrz poniższy przykład http://jsfiddle.net/F2Z2X/1/

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

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

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

będę o tym wszystkim stało?

Na przykład chcę uruchomić funkcję watchAction raz na początku, aby ukryć elementy interfejsu użytkownika, które nie są jeszcze wywoływane, ale funkcja watchAction nie ma obiektu $ scope, ponieważ nie jest wywoływana przez Metoda oglądania, więc muszę ją przekazać, ale niestety nie jest dostępna.

+0

.run zostaje uruchomiony raz na samym początku inicjalizacji. Nie wydaje mi się, żeby miało to sens w tym momencie. Możesz przekazać $ rootScope tho. –

Odpowiedz

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

można uzyskać $rootScope wtryskiwana tylko do services i run funkcji, ponieważ każdy child scope jest dziedziczona z jej zakresu dominującej i górny zakres poziom jest rootScope. Ponieważ byłoby niejednoznaczne wstrzyknięcie dowolnego zakresu. Dostarczany jest tylko zakres główny.

+0

1 pytanie: Jeśli dodaję jakiekolwiek procedury obsługi zdarzeń do bloku uruchamiania, takie jak '$ rootScope.on ('myevent', function() {})' .... jak mam wywołać $ destroy? Na samym $ rootScope? Ponieważ jeśli tego nie zrobię, otrzymam błąd lint .... i nie mogę użyć $ scope w bloku run. – Pawan

3
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; 
} 

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

To prosty przepływ, mamy rootScope, parentScope, childScope. W każdej sekcji przypisujemy odpowiednie zmienne zasięgu. Możemy uzyskać dostęp do $ rootScope w parentScope, rootScope i parentScope w childScope.

+0

Czy możesz edytować swój post po przeczytaniu tego? http://stackoverflow.com/editing-help – brasofilo

+0

jaki jest sens dodawania nowej odpowiedzi na pytanie, które zostało odebrane i zaakceptowane prawie rok temu? – ivarni

+3

Chciałbym podzielić się moją wiedzą, w tym np. Wyjaśnia rootScope do parentScope i parentScope do childScope, a url wyjaśnia konkurować z kodem HTML, mam nadzieję, że może to być pomocne dla @Tristan i innych – Shekkar

Powiązane problemy