С помощью ui-grid, как получить доступ к $ scope из вложенных строк?

0

В строке первого уровня я могу получить доступ к $scope помощью grid.appScope. Но в строке второго уровня я знаю, что возвращает grid.appScope.

У меня есть флажок в столбце строки второго уровня, когда пользователь нажимает, мне нужно вызвать метод. В строке первого уровня я могу сделать, как показано ниже

$scope.update_field = function...

затем в columndef, я добавляю ng-click="grid.appScope.update_field...

Как мне сделать аналогичную строку второго уровня?

Ниже приведен код, теперь поле checkfield работает, но не subcheckfield работать с subcheckfield.

controller('ctrlProductAssignment', function ($scope, $controller, $routeParams, api, libs, options, gui) {

    $scope.update_field = function (rowEntity, colDef, newValue, oldValue) {
        if (rowEntity.id > 0)
          ....
    };

    $scope.gridOptions = {
        onRegisterApi: function (gridApi) {
            $scope.gridApi = gridApi;

            gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) {
                if (row.isExpanded) {
                    row.entity.subGridOptions = {
                        columnDefs: [
                             { name: 'subcheckfield', displayName: 'Registered', 
                              cellTemplate: '<input type="checkbox" ng-model="row.entity[col.name]" ng-click="grid.appScope.update_field(row.entity, { name:col.name }, row.entity[col.name], 0)">' },
                          ]
                    };

                    api.raffle_productassignmentdetail.query({ raffle_id: $scope.deal.id, pa_id: row.entity.id }).$promise.then(function (response) {
                        row.entity.subGridOptions.data = response;
                    });
                }
            });
        },

        columnDefs: [
         { name: 'checkfield', displayName: 'Registered',                               
           cellTemplate: '<input type="checkbox" ng-model="row.entity[col.name]" ng-click="grid.appScope.update_field(row.entity, { name:col.name }, row.entity[col.name], 0)">' },
        ]
    };

    api.raffle_productassignment.query({ raffle_id: $scope.deal.id, reseller_id: reseller_id }).$promise.then(function (response) {
        $scope.gridOptions.data = response;
    });
}
  • 0
    извините, но вы слишком универсальны, пожалуйста, добавьте свой код
  • 0
    спасибо, пример кода добавлен.
Теги:
ui-grid

1 ответ

1
Лучший ответ

Вложенные строки имеют собственную область видимости, а их родительский объект - это область родительской строки. В вашем примере просто напишите ng-click="grid.appScope.scope.update_field и он будет работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню