【问题标题】:How can I access UI-Grid isolate scope from outside?如何从外部访问 UI-Grid 隔离范围?
【发布时间】:2016-07-05 21:20:08
【问题描述】:

在 Angular UI 网格之外有一个按钮。 我想在“默认”按钮单击时调用一个函数并将网格对象参数发布到回调函数。

还有第二个例子。但是,我不想将网格对象发布到网格内的按钮上,而是将网格对象发布到网格外的按钮上。

长话短说,我希望在网格之外有一个编辑按钮(选择一行模式已打开),而不是添加一列没有选择行选项的编辑按钮。

是否可以从 v3.1.0 开始? http://plnkr.co/edit/JyiN7MejqkiTuvczsOk1

由于某种原因,当我在 MainCtrl 中展开 $scope 对象时,gridOptions.appScopeProvider 为空。这里是 js 代码示例:

angular.module('modal.editing', ['ui.grid', 'ui.grid.selection', 'ui.grid.edit', 'ui.bootstrap', 'schemaForm'])

.constant('PersonSchema', {
  type: 'object',
  properties: {
    name: { type: 'string', title: 'Name' },
    company: { type: 'string', title: 'Company' },
    phone: { type: 'string', title: 'Phone' },
    'address.city': { type: 'string', title: 'City' }
  }
})

.controller('MainCtrl', MainCtrl)
.controller('RowEditCtrl', RowEditCtrl)
.service('RowEditor', RowEditor)
;

MainCtrl.$inject = ['$http', 'RowEditor', '$modal'];
function MainCtrl ($http, RowEditor) {
  var vm = this;

  vm.editRow = RowEditor.editRow;

  vm.gridOptions = {
    enableRowSelection: true,
    enableRowHeaderSelection: false,
    multiSelect: false,
    selectionRowHeaderWidth: 35,
    columnDefs: [
      { field: 'id', name: '', cellTemplate: 'edit-button.html', width: 34 },
      { name: 'name' },
      { name: 'company' },
      { name: 'phone' },
      { name: 'City', field: 'address.city' },
    ]
  };

  vm.test = function() {
    debugger;
  };

  $http.get('http://ui-grid.info/data/500_complex.json')
    .success(function (data) {
      vm.gridOptions.data = data;
    });
}

RowEditor.$inject = ['$rootScope', '$modal'];
function RowEditor($rootScope, $modal) {
  var service = {};
  service.editRow = editRow;

  function editRow(grid, row) {
    debugger;
    $modal.open({
      templateUrl: 'edit-modal.html',
      controller: ['$modalInstance', 'PersonSchema', 'grid', 'row', RowEditCtrl],
      controllerAs: 'vm',
      resolve: {
        grid: function () { return grid; },
        row: function () { return row; }
      }
    });
  }

  return service;
}

function RowEditCtrl($modalInstance, PersonSchema, grid, row) {
  var vm = this;

  vm.schema = PersonSchema;
  vm.entity = angular.copy(row.entity);
  vm.form = [
    'name',
    'company',
    'phone',
    {
      'key': 'address.city',
      'title': 'City'
    },
  ];

  vm.save = save;

  function save() {
    // Copy row values over
    row.entity = angular.extend(row.entity, vm.entity);
    $modalInstance.close(row.entity);
  }
}

【问题讨论】:

    标签: angularjs angularjs-scope angular-ui-grid


    【解决方案1】:

    这正是 onRegisterApi 的用途:

          vm.gridOptions = {
          enableRowSelection: true,
          enableRowHeaderSelection: false,
          multiSelect: false,
          selectionRowHeaderWidth: 35,
          columnDefs: [
            { field: 'id', name: '', cellTemplate: 'edit-button.html', width: 34 },
            { name: 'name' },
            { name: 'company' },
            { name: 'phone' },
            { name: 'City', field: 'address.city' },
          ],
          onRegisterApi: function (gridApi){
               vm.gridApi = gridApi;
          }
          };
    

    然后 gridApi 将在您的范围内(vm.gridApi),您可以访问网格和 gridApi.grid 中的所有行。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 2013-08-06
      • 2013-07-07
      • 1970-01-01
      相关资源
      最近更新 更多