在控制器中初始化嵌套的作用域变量
AngularJS: Initialize nested scope variables in controller
我喜欢保持模型名称的名称空间干净和描述性,所以我使用嵌套模型变量,像这样(其中月份和年份嵌套在服务中):
<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还没有被解析,所有的$scope
变量还没有被创建。我怎么能有一些代码等待运行,直到DOM已经被Angular解析和所有的模型已经创建?
这是我的控制器:
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(){
};
}])
$scope.service= {month:'Mar',year:2014};
AngularJS仍然是JavaScript。
不幸的是,AngularJS团队选择将实际的演示器(或视图模型)命名为controller
。这听起来可能不那么重要,但从概念上讲,这是为了理解controllers
的作用。
问题是$scope.service
对象是undefined
,所以它未能在控制器内定义year
属性,而不是视图。要做到这一点,您必须像这样在作用域中设置service
对象:
$scope.service = {};
,那么您可以在控制器或视图中的上为模型定义默认值:
<<p> 控制器选项/strong>$scope.service = {};
$scope.service.year = 2014;
或
$scope.service = {
year: 2014,
month: $scope.months[3] // to default to 'Apr'
};
<<p> 视图选项/strong> <form data-ng-submit="submit()"
data-ng-init="service.year=2014; service.month=months[3]">
...
</form>
无论采用哪种方法,您都必须在作用域中创建service
对象,以便在其上定义属性。使用对象文字表示法({}
)来创建它
相关文章:
- 当我更新另一个作用域变量时,作用域变量会自动更新
- 如何在隔离作用域指令中访问此作用域变量
- 正在向构造函数添加作用域变量
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 作用域变量未从状态父控制器继承到子控制器
- 插槽:访问作用域变量
- 在另一个作用域变量中使用AngularJS作用域变量
- 在Angular.js中通过检查作用域变量进行过滤
- 如何更新作为属性传入的作用域变量
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- 从$http.get调用更新Angular作用域变量
- AngularJS ui路由器:访问子作用域变量
- 访问AngularJS中函数中的作用域变量
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- 修改作用域变量后,未更新作用域绑定
- 控制器作用域变量在刷新之前未加载
- 将Angular作用域变量的字符串描述传递给指令
- 将内部作用域变量绑定到外部“模板”
- 无法在 $.post 回调中设置作用域变量
- 如何从在 JS 中用作参数的匿名函数中分配外部作用域变量