Как вызвать метод в окружающем контроллере с помощью кнопки в сетке пользовательского интерфейса, завернутой в пользовательскую директиву?

[tldr] Как заставить кнопку в шаблоне столбца вызывать метод из контроллера, окружающего сетку, когда сетка заключена в настраиваемую директиву? [ktxbye]

Чтобы объяснить, вот 3 plunkrs:

  1. P1) Колонка основных действий в ui-grid

    http://plnkr.co/edit/nYqZsKRYbTA0aFXVZOoV

  2. P2) то же самое, но с контроллером как vm

    http://plnkr.co/edit/b7x4Jjec5utkzSCrShMA

  3. P3) перенос ui-grid в my-grid (кнопка действия больше не работает)

    http://plnkr.co/edit/74AdcFywgNZgeGJn4nrb

В моем приложении все сложнее, и мне удалось заставить кнопку в пользовательском столбце вызывать метод контроллера моей сетки (через grid.appScope.vm.FunctionName; в P3 выше у моей сетки даже нет контроллера, это упрощенный пример), но подумал, что, возможно, копаю слишком глубоко в неправильном направлении, поэтому... как бы вы сделали так, чтобы кнопки в столбце сетки в P3 вызывали метод MainCtrl::Test?


person FOR    schedule 12.01.2016    source источник


Ответы (1)


После некоторой помощи от swalters (через блестящий чат ui-grid) я думаю, что у меня есть достойный ответ.

Как описано ui-grid (3.x) использует изолированные области, но позволяет использовать ваши шаблоны для доступа к внешней области через $scope.grid.appScope.

Чего я не понял, так это того, что когда вы настраиваете параметры сетки, вы можете переопределить то, что будет возвращать grid.appScope, установив параметр appScopeProvider, и что это может быть легко установлено для области действия, которая может быть у вас под рукой при создании приложения. сетка.

Следовательно, для сценария в моих предыдущих планках вот решение, просто добавив appScopeProvider: $scope к параметрам сетки.

http://plnkr.co/edit/0THPYZXPmqhfWYGo2ebE
person FOR    schedule 12.01.2016