2013-09-04 9 views
32

Mam zmienną ustawiam w moim widoku z ng-init, które próbuję uzyskać dostęp w moim kontrolerze. Kiedy jednak próbuję uzyskać do niego dostęp, otrzymuję numer undefined.

Istotne fragmenty kodu:

Moim zdaniem:

<div ng-controller="MyCtrl"> 
    <div ng-init="pageTitle = 'kittens'"> 
    </div> 
</div> 

Mój kontroler:

var MyCtrl; 

MyCtrl = function($scope) { 
    return console.log($scope.pageTitle); 
}; 

JSFiddle

Co ja tu brakuje?

+1

to dlatego, że console.log() zwraca niezdefiniowaną wartość, a następnie zwróci wartość jako kontroler. –

+1

Czy przegapiłeś poprawne skrzypce? – ssilas777

+0

@ przeprosiny @ ssilas777, proszę sprawdzić ponownie. – jetcom

Odpowiedz

34

Poczekaj, aż zmienna jest init.

$scope.$watch('pageTitle', function() { 
    console.log($scope.pageTitle); 
}); 
+0

To działa dobrze - dziękuję Dmitry! – jetcom

+0

Wolę '$ timeout (function() {/ * ... * /});' – Hafez

11

sterownik jest tworzony przed zmienna pageTitle dodaje do obiektu $ zakres.

+1

Rozumiem teraz - dzięki! – jetcom

13

Można również skorzystać z tego, jak JavaScript definiuje funkcje i korzysta z funkcji dla ng-init zamiast $ watch (jsfiddle).

<div ng-app> 
    <div ng-controller="MyCtrl" ng-init="pageTitleEquals('kittens')"> 
     Page title is {{ pageTitle }} 
    </div> 
</div> 

Kontroler:

var MyCtrl = function($scope) { 
    $scope.pageTitleEquals = function(title) { 
     $scope.pageTitle = title; 
    } 
}; 

To pytanie jest podobne: How to set scope property with ng-init?

2

Ponieważ robisz „pojedynczy proces init czasu”, jak konstruktor polecam Ci rozpiąć zegarka po użyciu zmienna:

var pageTitleWatch = $scope.$watch('pageTitle', function() { 
    console.log($scope.pageTitle); 
    // Now just unbind it after doing your logic 
    pageTitleWatch(); 
}); 
Powiązane problemy