2014-06-18 20 views
0

我是AngularJS的新手,我試圖從純服務器端移動到在前端使用AngularJS實時實現魔術。AngularJS重新填充用於編輯的複選框

我有一個用戶可以擁有多個權限。當創建一個新用戶時,你可以選擇多個複選框,一切正常。當用戶想要更改用戶的權限時,我無法重新填充複選框。

我使用的清單模型的指令,在這裏找到http://vitalets.github.io/checklist-model/

在數據庫中,我有一個用戶,權限和users_permissions表。

UsersController -Laravel

public function show($id) 
{ 
    $user = User::with('permissions')->find($id); 
    return $user; 
} 

UserController的-Angular

Users.controller('UserController', ['$scope', '$routeParams', 'User', 'Permission', function($scope, $routeParams, User, Permission) { 
    $scope.user = User.get({ id: $routeParams.id }); 
    $scope.permissions = Permission.query(); 
}]); 

因爲我重視的權限對服務器端的用戶,當我console.log($scope.user)我得到這個對象

enter image description here

現在的視圖

單user.html

<h4>Manage Permissions</h4> 
    <div class="form-group"> 
     <label ng-repeat="permission in permissions"> 

     <input type="checkbox" checklist-model="user.permissions" checklist-value="permission.id" class="checkbox-inline"> 
      {{ permission.display_name }} 
     </label> 
    </div> 
    <button class="btn btn-success" type="submit">Save</button> 

我認爲我可以創建在包含所述$scope.user.permissions.id控制器分配的變量,然後抵靠$scope.permissions.id比較這些值如果他們匹配,然後檢查複選框。

當我試圖創建$scope.assigned = $scope.user.permissions.id和console.log(分配),然後我剛剛返回undefined。

我不知道如何創建一個分配的權限數組來比較標準權限,感謝您的任何建議。

回答

0

User.getPermission.query看起來像他們正在使用$resource。這些將返回將(如果一切順利的話)解決您的數據而不是返回數據本身的承諾。這些調用是異步的。所以你需要傳遞一個函數參數,當異步調用完成時被調用。

當你的console.log測試期間得到了undefined,這是因爲在$scope.user.permissions.id$scope.user實際上是一個承諾($q),而不是您所期望的對象。您基本上正在評估$q.permissions.id,這是未定義的。

User.get({ id: $routeParams.id }, function(user) { $scope.user = user; }); 
Permission.query(function(permissions) { $scope.permissions = permissions; }); 

或者你可以嘗試(肯定不是100%在這一個)是這樣的

$q.all(
    User.get({ id: $routeParams.id }); 
    Permission.query(); 
).then(function(user, permissions) { $scope.user = user, $scope.permissions = permissions }); 

請參閱下面的更多詳細信息你怎麼能鏈行動向User.get()Permission.query()電話:

+0

這兩種解決方案都無效,但您對承諾的看法是有道理的。我相信這是朝正確方向邁出的一步,謝謝@ scottt732 –