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;
    });
}]);

控制器(LARAVEL)

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()

检查元素(铬)

在此处输入图像描述

从检查元素中可以清楚地看出数据在那里,但它只是没有显示为选择框中的选定项目。有人可以告诉我我做错了什么吗?

4

1 回答 1

1

您的 ng-options 表达式与您需要的不匹配。您有track by employee.usersId语法employee.employeeName for employee in employeesName track by employee.usersId,这意味着您需要将 ng-model 设置为 userId 而不是 name,并且还需要将其设置为对象而不仅仅是字符串,即理想情况下,您的 ng-model 应该schedule.employee = {usersId:'someid'}用于默认选择。现在来到您的案例,您似乎正在尝试将 ng-model 设置为字符串,并且您希望它是员工的姓名(这可能是一个糟糕的选择,因为您已经有一个 id)您应该尝试使用替代语法select as数组中的值标签

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

还请记住,当您使用 select 作为语法时,您应该删除 track by,因为它们不是为一起工作而设计的。

边注:-

使用ng-init来初始化 ng-mode 是个坏主意。医生说:

ngInit 唯一合适的用途是为 ngRepeat 的特殊属性设置别名,如下面的演示所示。除了这种情况,您应该使用控制器而不是 ngInit 来初始化作用域上的值。

于 2014-12-25T23:16:19.960 回答