$ scope如何初始化?

时间:2014-09-10 09:51:13

标签: angularjs angularjs-scope

所以我没有和AngularJs一起工作很长时间并遇到了我修复过的问题,但想知道我做的是否正确?

我用这样的ng-model创建了一个视图:

<div class="col-sm-7 col-md-7">
    <select ng-model="user.UserTypeId" ng-options="item.UserType for item in userTypes" class="form-control"></select>
</div>

现在我想我可以像这样设置$ scope.user.UserTypeId的初始值:

$scope.userTypes = [
    { UserTypeId: "FB1AE6EA-D94F-4EC9-8FE8-44178D45D9C9", UserType: "Admin" },
    { UserTypeId: "FF6DE9DB-195D-48F8-87AB-E56B49E3A9D8", UserType: "User" }
];

$scope.user.UserTypeId = $scope.userTypes[0];

但是在控制器的执行中,我在$ scope.user对象上获得了“未定义”。我通过在控制器顶部初始化$ scope.user来解决这个问题。

$scope.user = {};

我的问题是我这样做是正确的吗?我会认为angularJs会为我做这件事,我不需要初始化我在ng模型中的每个对象,或者这就是它的完成方式?

3 个答案:

答案 0 :(得分:2)

这与Angular无关,真的。只是JavaScript遇到错误。您正在尝试将属性(UserType)添加到尚不存在的对象($ scope.user)。

正确地创建一个空对象是正确的方法。

答案 1 :(得分:0)

是的,你正在以正确的方式做到这一点。您需要初始化嵌套属性的父属性 - 这就是JavaScript的工作方式。但是,如果您设置了ng-model =“userTypeId”(非嵌套),那么您不需要在控制器中初始化$ scope.userTypeId。

答案 2 :(得分:0)

控制器扩展了一个新的范围,这是我所理解的。当您的控制器被实例化时,会创建一个新的范围,因此稍后将在此新范围中创建您的指令。