2013-04-30 101 views
5

我正在使用https://github.com/angular/angular-seed的克隆来制作一个简单的Angular.js应用程序。我试图将一些属性添加到控制器中,以便将它们绑定到我的HTML中,但不断收到我似乎无法弄清楚的错误消息。Angular.js控制器无法设置属性

我controllers.js文件看起来像这样目前:

'use strict'; 

/* Controllers */ 

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

    }]); 

这里是app.js太多,如果它可以帮助:

'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'}); 
    }]); 

我的应用程序中使用的默认名称“ myApp“,并且在我的HTML中也调用了ng-view。当MyCtrl1在使用中,我不断得到这个错误:

TypeError: Cannot set property 'names' of undefined 

这里有句法错误吗?我一直在努力,只修改controllers.js,以避免问题,所以不应该有其他地方的问题...

回答

14

控制器有几个重载,您可以简化您的代码如下:

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

    }); 

或者让角知道$范围是什么样的:

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

    }]); 

参考:http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

+0

化险为夷,我只是觉得自己很笨这里!谢谢! – elwis 2013-10-26 14:26:21

+0

这里只需要注意一下,我尝试使用第二个示例($ scope在数组中引用),但是我无法使其工作,只有第一个示例适用于我:S其他人则试图让第二个人工作。 – onaclov2000 2013-12-10 15:44:41

+0

@ onaclov2000这可能是一个错别字......你有没有工作的例子吗?它适用于最新版本:http://jsfiddle.net/hS9sn/(相同的代码也适用于较旧的版本)。 – Langdon 2013-12-10 16:34:49

相关问题