2013-09-04 10 views
32

Ho una variabile che sto impostando a mio avviso con ng-init che sto cercando di accedere al mio controller. Quando provo ad accedere comunque, sto ottenendo un undefined.

pezzi rilevanti di codice:

mio punto di vista:

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

mio regolatore:

var MyCtrl; 

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

JSFiddle

Che cosa mi manca qui?

+1

perché console.log() restituisce undefined, quindi si restituisce tale valore come controller. –

+1

Ti sei perso il violino corretto? – ssilas777

+0

@ ssilas777 scuse, per favore controlla di nuovo. – jetcom

risposta

34

Attendere fino a quando la variabile è init.

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

Funziona bene, grazie Dmitry! – jetcom

+0

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

11

il controller viene creato prima che la variabile pageTitle venga aggiunta all'oggetto $ scope.

+1

Capisco ora- grazie! – jetcom

13

È anche possibile sfruttare il modo in cui JavaScript definisce le funzioni e utilizzare una funzione per ng-init anziché $ watch (jsfiddle).

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

Controller:

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

Questa domanda è simile: How to set scope property with ng-init?

2

Dal momento che si stanno facendo un "tempo init single", come un costruttore vi consiglio di non associare l'orologio dopo aver usato il variabile:

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