2015-09-11 11 views
6

io non riesco a capire perché il seguente non funziona:angolare non è possibile impostare la proprietà di non definito

main.html

<div class="MainCtrl"> 
    <h1>{{message.test}}</h1> 
</div> 

main.js

angular.module('myApp') 
    .controller('MainCtrl', function(someService, $location, $scope) { 

    $scope.message.test = "blablabla"; 

    } 
}); 

Quando ho eseguo il codice Posso un errore che indica:

TypeError: Cannot set property 'test' of undefined at new (http://localhost:9000/scripts/controllers/main.js:13:25) at invoke (http://localhost:9000/bower_components/angular/angular.js:4473:17) at Object.instantiate (http://localhost:9000/bower_components/angular/angular.js:4481:27) at http://localhost:9000/bower_components/angular/angular.js:9108:28 at $route.link (http://localhost:9000/bower_components/angular-route/angular-route.js:977:26) at invokeLinkFn (http://localhost:9000/bower_components/angular/angular.js:8746:9) at nodeLinkFn (http://localhost:9000/bower_components/angular/angular.js:8246:11) at compositeLinkFn (http://localhost:9000/bower_components/angular/angular.js:7637:13) at publicLinkFn (http://localhost:9000/bower_components/angular/angular.js:7512:30) at name.$get.boundTranscludeFn (http://localhost:9000/bower_components/angular/angular.js:7656:16)

Chiaramente mi manca qualcosa di super ovvio ..

risposta

25

Si sta definendo una proprietà su un oggetto indefinito, è necessario inizializzare l'oggetto prima di impostare le proprietà.

$scope.message = {}; 
$scope.message.test = 'bla'; 
3

il test non esiste all'interno di un messaggio, è necessario fare $scope.message = {}; prima, $scope.message.test = "blablabla";

3

message nel codice non è un oggetto, è necessario farlo:

$scope.message = { test: 'blablabla' }; 
4

È dovrebbe inizializzare l'oggetto $scope.message, ma farlo in sicurezza (nel caso in cui sia definito da qualche altra parte, forse in alcune circostanze):

$scope.message = $scope.message || {}; 
$scope.message.test = "blablabla"; 
Problemi correlati