2014-09-10 22 views
-1

所以我一直沒有和AngularJs一起工作很長時間,遇到了一個我修復的問題,但想知道我是否做對了嗎?

我創建了NG-模型這樣的觀點:

<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對象上得到一個「undefined」。我已經通過初始化控制器頂部的$ scope.user來解決這個問題。

$scope.user = {}; 

我的問題是我在做這個正確的方法嗎?我會認爲angularJs會爲我做這件事,而且我不需要初始化我在ng模型中的每個對象,或者它是這樣完成的嗎?

+0

AngularJS只會在您與輸入交互並更改值時執行此操作。那時它將創建財產並分配價值。 – Chandermani 2014-09-10 09:57:05

+1

'ng-model'會創建一個對象,如果它不存在但是在編譯html之前必須運行控制器腳本,所以你不能在創建它之前將屬性添加到非existant對象 – charlietfl 2014-09-10 10:51:54

回答

2

這和Angular沒什麼關係,真的。這只是JavaScript運行時出現錯誤。您正試圖將一個屬性(UserType)添加到尚不存在的對象($ scope.user)中。

正如你所做的那樣創建一個空對象是正確的方法。

0

是的,你正在做的是正確的方式。您需要初始化嵌套屬性的父屬性 - 這就是JavaScript的工作原理。但是,如果你設置了ng-model =「userTypeId」(非嵌套),那麼你不需要在控制器中初始化$ scope.userTypeId。

0

控制器擴展了一個新的範圍,這就是我所理解的。當你的控制器被實例化時,一個新的作用域被創建,因此你在這個新作用域中的指令將在稍後被創建。