我喜欢保持模型名称的名称空间清晰且具有描述性,因此我使用这样的嵌套模型变量(月份和年份嵌套在服务中):
<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>
在我的控制器中,我想将$scope.service.month
和$scope.service.year
设置为初始值,但我收到javascript错误Cannot set property 'year' of undefined
,因此我猜测DOM没有&# 39;已经解析并且还没有创建所有$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(){
};
}])
答案 0 :(得分:5)
$scope.service= {month:'Mar',year:2014};
AngularJS仍然是JavaScript。
不幸的是,AngularJS团队选择了名称实际上是演示者(或视图模型),controller
。听起来可能不那么重要,但从概念上讲,这是为了理解controllers
做什么。
答案 1 :(得分:4)
问题是$scope.service
对象是undefined
,因此无法在控制器内部而不是视图上定义year
属性。要使其工作,您必须在范围上设置service
对象,如下所示:
$scope.service = {};
然后您可以在视图中的控制器或上定义模型的默认值:
控制器选项
$scope.service = {};
$scope.service.year = 2014;
或
$scope.service = {
year: 2014,
month: $scope.months[3] // to default to 'Apr'
};
查看选项
<form data-ng-submit="submit()"
data-ng-init="service.year=2014; service.month=months[3]">
...
</form>
无论哪种方式,您都必须在范围上创建service
对象,以便在其上定义属性。使用对象文字符号({}
)来创建它。