Невозможно установить значение по умолчанию для angularjs select при использовании watch - PullRequest
0 голосов
/ 01 июля 2018

View

<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

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'

Когда я редактирую должность руководителя отдела продаж, Мне нужно установить значение выбора отдела как «Продажи», и выберите позицию по умолчанию в качестве «Менеджера по продажам».

Я могу загружать позиции List в соответствии с изменением выбора отдела, используя watch в angularjs.

В часах

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

То есть, когда я меняю отдел выбора, соответствующая positionList автоматически загружается в positionList select и первая позиция устанавливается как выбранная позиция.

Но, когда я использую часы, я не могу установить значение по умолчанию в DepartmentList Select и PositionList Select.

то есть, Если я хочу отредактировать 3-е значение департамента в DepartmentList (департаментЛист [2]), Мне нужно установить выбранное по умолчанию значение в качестве DepartmentList [2] и установить соответствующую позицию в качестве позиции по умолчанию в позиции выбора (например, установить dfefault в качестве positionList [4].

Но, Когда я использую часы, Я не могу установить опцию выбора по умолчанию. Когда я использую часы, значение по умолчанию всегда в виде DepartmentList [0] и positionList [0].

Когда я только меняюсь, изменение значения по умолчанию на кафедрыList [0] и позицииList [0].

Если без изменений выбрана любая опция, параметры выбора должны быть в значениях по умолчанию. т.е. ведомостиList [2] и позицииList [4].

Как мне установить значение по умолчанию? и как я могу установить часы? В угловых JS 1.6.

. , , , , , , ,

1 Ответ

0 голосов
/ 01 июля 2018

Избегайте использования $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];
        });
};

Начальное значение устанавливается контроллером и обновляется, когда пользователь меняет выбор.

...