AngularJS:在控制器中初始化嵌套的范围变量

Tyl*_*ler 5 javascript angularjs

我喜欢保持模型名称的名称空间清晰和描述性,所以我使用这样的嵌套模型变量(月份和年份嵌套在服务中):

<form data-ng-submit="submit()">
  <select data-ng-model="service.month" data-ng-options="m for m in months"/>
  <input data-ng-model="service.year"/> {{ service.year }}
  <input type="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我想设置$scope.service.month$scope.service.year初始值,但我得到一个javascript错误Cannot set property 'year' of undefined,所以我猜测DOM尚未被解析,所有$scope变量尚未创建.在Angular解析DOM并且所有模型都已创建之前,我怎么能等待一些代码等待运行?

这是我的控制器:

mod.controller('AddServiceCtrl', [
    '$scope', 
    '$rootScope', 
function($scope, $rootScope) {
  var date = new Date();
  $scope.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  $scope.service.year = 2014;   
  $scope.submit = function(){
  };
}])
Run Code Online (Sandbox Code Playgroud)

mpm*_*mpm 5

 $scope.service= {month:'Mar',year:2014};
Run Code Online (Sandbox Code Playgroud)

AngularJS仍然是JavaScript.

不幸的是,AngularJS团队选择了实际上是演示者(或视图模型)的名称,a controller.这可能听起来不那么重要,但从概念上讲,这是为了理解做controllers什么.