Шаблон внутренней матрицы ng-click не запускает функцию в контроллере
Я создал плункер здесь: http://plnkr.co/edit/zGqouwzxguef13lx48iP?p=preview
Когда я щелкаю в ячейке ui-сетки в дневном режиме, ничего не происходит. Я ожидал, что тестовая функция выполнена, и предупреждение отображается с текстом "test", но это не так.
Что здесь происходит?
Вот шаблон html-ячейки последней версии ui-grid 3.0:
HTML
<div ng-click="test()" ng-switch="row.entity[row.grid.columns.indexOf(col)].isPeriod">
<div ng-switch-when="true">
<tabset>
<tab>
<tab-heading>
<i class="glyphicon glyphicon-book"></i>
</tab-heading>period id:
{{ row.entity[row.grid.columns.indexOf(col)].id}}
</tab>
<tab select="alertMe()">
<tab-heading>
<i class="glyphicon glyphicon-bell"></i>
</tab-heading>
{{row.entity[row.grid.columns.indexOf(col)].content}}
</tab>
</tabset> <!-- PeriodTemplate -->
</div>
<div ng-switch-when="false">
<div>Hello empty template</div>
</div> <!-- EmptyPeriodTemplate -->
</div>
CONTROLLER:
'use strict';
angular.module('projectplanner').controller('DateplannerDayController', function ($scope, $state) {
var columnHeaderDates = ['col1','col2','col3','col4','col5','col6','col7']
$scope.columns = createColumnHeaders(columnHeaderDates);
var data = [{isPeriod: true, id: 10, rowNumber: 1},{isPeriod: false, id: 11, rowNumber: 2}]
$scope.test = function()
{
alert('test');
};
$scope.gridOptions = {
rowHeight: 200,
data: data,
enableSorting: false,
enableColumnMenu: false,
columnDefs: $scope.columns,
onRegisterApi: function (gridApi) {
$scope.gridApi = gridApi;
$scope.gridApi.core.addRowHeaderColumn(
{ name: 'rowHeaderCol',
displayName: '',
width: 100,
cellTemplate: '<div>row header template</div>'
});
}
};
function createColumnHeaders(columnHeaders) {
var columnDefinitions = [];
for (var i = 0; i < columnHeaders.length; i++) {
var column = {
name: columnHeaders[i],
cellTemplate: 'lessonplanner.day.celltemplate.html',
field: i + 'x'
}
columnDefinitions.push(column);
}
return columnDefinitions;
}
});
Ответы
Ответ 1
Эта страница продолжала появляться в моих поисках, и мне удалось пропустить решение в комментариях. Подводя итог, вам, скорее всего, придется использовать внешниеScopes. См. Angular события ui-grid в заголовке ячейки, не запускающие, и http://ui-grid.info/docs/#/tutorial/305_appScope
Ответ 2
Это потому, что ui-grid имеет свой собственный контроллер, и он не знает о внешнем контроллере.
Чтобы облегчить, сделайте следующее.
1. Сначала назначьте контроллер на ui-сетку.
var vm = this;
this.$scope.usersGridOptions = {
appScopeProvider: vm,
....
}
Теперь, как только вы назначите контроллер сетке, вы можете вызвать такую функцию, как это.
"<a type=\"button\" href=\"\" ng-click=\"function(row.entity)\"> {{ row.entity.text}} </a>"
Ответ 3
В ui-grid шаблон ячейки, поскольку ячейка имеет свою область видимости,
1) do not use onclick='', instead should use ng-click=''
2) ng-click='your_function()' will not work, should use, grid.appScope.your_function()
3) when pass parameter in function(), do not use function({{xxx}}), see sample below
cellTemplate: '<div class="ui-grid-cell-contents" title="TOOLTIP"><a href="" ng-click="grid.appScope.watering_modal(grid.appScope.editLink_tree_id(grid, row),grid.appScope.editLink_site_no(grid, row),grid.appScope.editLink_crm(grid, row), grid.appScope.editLink_package_no(grid, row) )">{{grid.appScope.editLink_tree_id(grid, row)}}</a></div>'