1

看法

<select  ng-options="department.name for department in departmentsList track by department.departmentID"
         ng-model="editAllocate.department">
</select>

<select  ng-options="position.name for position in positionsList track by position.positionID"
         ng-model="editAllocate.position">
</select>

部门列表

departmentsList[0].departmentID = 1
departmentsList[0].name= 'Accounts'
departmentsList[1].departmentID = 2
departmentsList[1].name= 'Sales'
departmentsList[2].departmentID = 3
departmentsList[2].name= 'Service'
departmentsList[3].departmentID = 4
departmentsList[3].name= 'Management'

职位列表

    positionsList[0].positionID = 1
    positionsList[0].departmentID = 1
    positionsList[0].name = 'Junior Accountant'
    positionsList[1].positionID = 2
    positionsList[1].departmentID = 1
    positionsList[1].name = 'Senior Accountant'
    positionsList[2].positionID = 3
    positionsList[2].departmentID = 2
    positionsList[2].name = 'Sales Executive'
    positionsList[3].positionID = 4
    positionsList[3].departmentID = 2
    positionsList[3].name = 'Sales Officer'
    positionsList[4].positionID = 5
    positionsList[4].departmentID = 3
    positionsList[4].name = 'Service Supervisor'
    positionsList[5].positionID = 6
    positionsList[5].departmentID = 3
    positionsList[5].name = 'Service Engineer'
    positionsList[6].positionID = 7
    positionsList[6].departmentID = 4
    positionsList[6].name = 'Administrator'
    positionsList[7].positionID = 8
    positionsList[7].departmentID = 4
    positionsList[7].name = 'Manager'

当我编辑职位销售主管时,我需要将部门选择值设置为“销售”,并将职位选择值默认设置为“销售主管”。

我可以通过在angularjs中使用watch来根据部门选择的变化加载positionsList。

在手表上,

$scope.$watch('editAllocate.department', function()
{
     $http(
         {  method:'post',
            dataType : 'json',
            url:'<?php echo base_url()?>EditEmployee/getPositionsListForSelectedDepartment',
            data : empDepartment,
            headers : {'Content-Type': 'application/json'} 
         }).then(function mySuccess(response)
        {
            $scope.positionsList = response.data;

            $scope.editAllocate.position = $scope.positionsList[0];
}); 

即,当我更改部门选择时,相应的位置列表会自动加载到位置列表选择中,并将第一个位置设置为选定位置。

但是,当我使用手表时,我无法在部门列表选择和职位列表选择中设置默认值。

即,如果我想在部门列表 (departmentsList[2]) 中编辑部门的第三个值,我需要将默认选定值设置为部门列表 [2],并将相应位置设置为位置选择中的默认位置(例如将 dfefault 设置为位置列表 [ 4]。

但是,当我使用手表时,我无法设置默认选择选项。当我使用手表时,默认值始终为部门列表 [0] 和位置列表 [0]。

当我只更改时,默认值更改为部门列表 [0] 和位置列表 [0]。

当不更改任何选择选项时,选择选项应为默认值。即部门列表[2] 和职位列表[4]。

如何设置默认值?以及如何设置手表?在角度 JS 1.6 中。

. . . . . . . .

4

1 回答 1

0

避免使用$watch. 而是使用ng-change指令:

<select  ng-options="department.name for department in departmentsList track by department.departmentID"
         ng-model="editAllocate.department" ng-change="updatePositionList()">
</select>

然后从控制器设置默认值:

$scope.positionList = <default>;

̶$̶s̶c̶o̶p̶e̶.̶$̶w̶a̶t̶c̶h̶(̶'̶e̶d̶i̶t̶A̶l̶l̶o̶c̶a̶t̶e̶.̶d̶e̶p̶a̶r̶t̶m̶e̶n̶t̶'̶,̶ ̶f̶u̶n̶c̶t̶i̶o̶n̶(̶)̶
$scope.updatePositionList = function()
{
     $http(
         {  method:'post',
            dataType : 'json',
            url:'<?php echo base_url()?>EditEmployee/getPositionsListForSelectedDepartment',
            data : empDepartment,
            headers : {'Content-Type': 'application/json'} 
         }).then(function mySuccess(response)
        {
            $scope.positionsList = response.data;

            $scope.editAllocate.position = $scope.positionsList[0];
        });
};

初始值由控制器设置并在用户更改选择时更新。

于 2018-07-01T12:19:49.270 回答