2013-04-30 10 views
5

Sto utilizzando un clone di https://github.com/angular/angular-seed per creare una semplice app Angular.js. Sto cercando di aggiungere alcune proprietà ai controller per collegarli al mio codice HTML, ma continuo a ricevere messaggi di errore che non riesco a capire.Angular.js Il controller non può impostare le proprietà

Il mio file controllers.js assomiglia a questo momento:

'use strict'; 

/* Controllers */ 

angular.module('myApp.controllers', []). 
    controller('MyCtrl1', [function($scope) { 
    $scope.names = 'bob' 
    }]) 
    .controller('MyCtrl2', [function() { 

    }]); 

Ecco l'app.js anche se aiuta:

'use strict'; 

// Declare app level module which depends on filters, and services 
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives',  'myApp.controllers']). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MyCtrl1'}); 
    $routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: 'MyCtrl2'}); 
    $routeProvider.otherwise({redirectTo: '/view1'}); 
    }]); 

ho usato il nome predefinito per l'applicazione " myApp "e ho anche chiamato ng-view all'interno del mio HTML. Quando MyCtrl1 è in uso, ottengo continuamente questo errore:

TypeError: Cannot set property 'names' of undefined 

C'è qualcosa di sintatticamente sbagliato qui? Ho cercato di modificare solo controllers.js per evitare di avere problemi, quindi non ci dovrebbero essere problemi altrove ...

risposta

14

controller ha un paio di sovraccarichi, è possibile semplificare il codice a questo:

angular.module('myApp.controllers', []). 
    controller('MyCtrl1', function($scope) { 
    $scope.names = 'bob' 
    }) 
    .controller('MyCtrl2', function() { 

    }); 

O lasciare angolare sa cosa $ campo di applicazione è simile a questo:

angular.module('myApp.controllers', []). 
    controller('MyCtrl1', ['$scope', function($scope) { 
    $scope.names = 'bob' 
    }]) 
    .controller('MyCtrl2', [function() { 

    }]); 

Riferimento: http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

+0

salvato la giornata, ero appena sentivo stupido qui! Grazie! – elwis

+0

Solo una nota qui, ho provato ad usare il secondo esempio, (dove $ scope è referenziato nell'array), ma non ero in grado di farlo funzionare, solo il primo sembrava funzionare per me: S nel caso qualcuno altro sta cercando di far funzionare il secondo. – onaclov2000

+0

@ onaclov2000 Probabilmente è un errore di battitura da qualche parte ... ne hai un esempio che non funziona? Funziona qui con la versione più recente: http://jsfiddle.net/hS9sn/ (lo stesso codice funziona anche con quelli più vecchi). – Langdon

Problemi correlati