2

データベースから選択ボックスに格納された値を取得しようとしていますが、表示されません。選択した値はコンソールに表示されますが(要素を検査)、表示されません。

HTML

<td data-ng-class="{'has-error': employeeSchedule.employee.$invalid && employeeSchedule.employee.$dirty}">
    <select class="form-control input-sm" name="employee" ng-model="schedule.employee" ng-init="schedule.employee='{{$schedules[0]->employee}}'" ng-options="employee.employeeName for employee in employeesName track by employee.usersId">
        <option value="">Select Employee</option>
    </select>
</td>

AngularJS

app.controller('UpdateWorkScheduleCtrl', [ '$scope', '$http', function ($scope, $http)
{
    $http.get('/schedule/employees').success(function(employeedata) {
        $scope.employeesName = employeedata;
    });
}]);

コントローラー(ララベル)

public function getEmployees() {

    $users = DB::select(DB::raw("SELECT `usersId`, CONCAT(`firstName`,' ',`middleName`,' ',`lastName`) AS employeeName 
                                 FROM `users` 
                                 WHERE `userStatus` != 'Administrator' 
                                 AND `userStatus` != 'Director' 
                                 AND `userStatus` != 'HR Specialist'"));

    return Response::json($users);
} // end function getEmployees()

エレメントの検査 (クローム)

ここに画像の説明を入力

データがそこにあることは inspect 要素から明らかですが、選択ボックスで選択されたアイテムとして表示されていません。誰かが私が間違っていることを教えてください。

4

1 に答える 1

1

ng-options 式が必要なものと一致しません。これは、ng-model を name の代わりに userId に設定し、文字列だけでなくオブジェクトとしても設定する必要があることを意味しtrack by employee.usersIdますemployee.employeeName for employee in employeesName track by employee.usersId。つまり、ng-model は理想的にschedule.employee = {usersId:'someid'}はデフォルトで選択する必要があります。ng-model を文字列として設定しようとしていて、従業員の名前が必要なように見えるあなたのケースに来ます(すでにIDを持っているので、これはおそらく悪い選択です)次の代替構文を試す必要がありますselect as配列内の値のラベル` :

ng-options="employee.employeeName as employee.employeeName for employee in employeesName "

また、select as 構文を使用する場合は、track by を削除する必要があります。これらは一緒に動作するように設計されていないためです。

サイドノート:-

ng-mode の初期化に ng -initを使用するのは悪い考えです。そして、ドキュメントは次のように述べています。

ngInit の唯一の適切な使用法は、以下のデモに見られるように、ngRepeat の特別なプロパティをエイリアシングすることです。この場合とは別に、ngInit ではなくコントローラーを使用して、スコープの値を初期化する必要があります。

于 2014-12-25T23:16:19.960 に答える