Добавить ссылку html в любом из ng-grid
Я хочу добавить ссылку на ng-grid.
Вот мой код для вашей справки
<html ng-app="myApp">
<head lang="en">
<meta charset="utf-8">
<title>Getting Started With ngGrid Example</title>
<link href="../../Content/ng-grid.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/jquery-1.9.1.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.20.js" type="text/javascript"></script>
<script src="../../Scripts/angular.js" type="text/javascript"></script>
<script src="../../Scripts/ng-grid.js" type="text/javascript"></script>
<script src="../../Scripts/main.js" type="text/javascript"></script>
<script type="text/javascript">
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', function ($scope) {
$scope.myData = [{ name: "RK.PRABAKAR", age: 25, href: "<a href='#'>Link1</a>" },
{ name: "Yoga", age: 27, href: "<a href='#'>Link1</a>" },
{ name: "James", age: 27, href: "<a href='#'>Link1</a>" },
{ name: "Siva", age: 35, href: "<a href='#'>Link1</a>" },
{ name: "KK", age: 27, href: "<a href='#'>Link1</a>"}];
$scope.pagingOptions = {
pageSizes: [2, 4, 6],
pageSize: 2,
currentPage: 1
};
$scope.gridOptions = {
data: 'myData',
enablePaging: true,
showFooter: true,
enableCellSelection: true,
enableRowSelection: false,
enablePinning: true,
pagingOptions: $scope.pagingOptions,
enableCellEdit: true,
columnDefs: [{ field: 'name', displayName: 'Name', enableCellEdit: true },
{ field: 'age', displayName: 'Age', enableCellEdit: true },
{ field: 'href', displayName: 'Link', enableCellEdit: false }]
};
});
</script>
<style>
.gridStyle {
border: 1px solid rgb(212,212,212);
width: 500px;
height: 300px;
}
</style>
</head>
<body data-ng-controller="MyCtrl">
<div class="gridStyle" data-ng-grid="gridOptions"></div>
</body>
Сейчас сетка данных работает отлично, за исключением ссылки href в сетке.
Ссылка не отображается в тег html, она отображается как обычная строка.
Я хочу добавить ссылку на ng-grid из myDatap >
Ответы
Ответ 1
Update:
Было отмечено, что этот ответ не работает с ui-grid
. Это понятно, так как во время ответа существовал только ng-grid
; однако, вместо {{row.getProperty(col.field)}}
, вместо {{row.getProperty(col.field)}}
, решение будет действительным как для ng-grid
, так и для ui-grid
.
Я знаю, что я использовал COL_FIELD
в этих ситуациях примерно в то время, когда писал этот ответ, поэтому я не уверен в своем обосновании для ответа на более длинный row.getProperty(col.field)
& hellip, но в любом случае используйте COL_FIELD
и вам должно быть хорошо идти с ng-grid
и ui-grid
.
Оригинал (без изменений) Ответ:
Вам просто нужно определить шаблон ячейки для поля Link & hellip;
Вы можете сделать это inline:
{
field: 'href',
displayName: 'Link',
enableCellEdit: false,
cellTemplate: '<div class="ngCellText" ng-class="col.colIndex()"><a href="{{row.getProperty(col.field)}}">Visible text</a></div>'
}
Или вы можете сделать это, используя переменную (чтобы сохранить gridOptions немного чище:
var linkCellTemplate = '<div class="ngCellText" ng-class="col.colIndex()">' +
' <a href="{{row.getProperty(col.field)}}">Visible text</a>' +
'</div>';
{
field: 'href',
displayName: 'Link',
enableCellEdit: false,
cellTemplate: linkCellTemplate
}
Или вы даже можете разместить свой шаблон во внешнем HTML файле и указать URL-адрес:
{
field: 'href',
displayName: 'Link',
enableCellEdit: false,
cellTemplate: 'linkCellTemplate.html'
}
& hellip; вам нужно только сохранить URL-адрес как href
в myData
для работы с этим решением:)
Посмотрите здесь пример шаблона ячейки.
Ответ 2
Ответ, который дал Kabb5, верен, но, похоже, для более новых версий ui-grid это не работает. Однако все, что касается cellTemplate, действительны, вместо
row.getProperty(col.field)
Вам нужно сделать:
COL_FIELD
Это был единственный способ, которым я смог заставить это работать.
Ответ 3
Right.
Levi {{COL_FIELD}}
работает с angular-ui-grid 3.0.0-rc.20
.
$scope.gridOptions.columnDefs = [
{ name: 'firstname' },
{ name: 'lastname'},
{ name: 'email', displayName: 'Email', allowCellFocus : false },
{
field: 'viewUrl',
displayName: 'View',
enableCellEdit: false,
cellTemplate: '<div class="ngCellText" ng-class="col.colIndex()"><a ng-href="{{COL_FIELD}}" class="glyphicon glyphicon-eye-open green"></a></div>'
},
{
field: 'editUrl',
displayName: 'Edit',
enableCellEdit: false,
cellTemplate: '<div class="ngCellText" ng-class="col.colIndex()"><a ng-href="{{COL_FIELD}}" class="glyphicon glyphicon-pencil blue"></a></div>'
},
{
field: 'id',
displayName: 'Delete',
enableCellEdit: false,
cellTemplate: '<div class="ngCellText" ng-class="col.colIndex()"><a ng-click="grid.appScope.deleteUser(COL_FIELD)" class="glyphicon glyphicon-remove red"></a></div>'
}
];
$scope.deleteUser = function(userId) {
alert('Delete '+userId);
};
Ответ 4
Чтобы получить свойство объекта в строке, можно просто использовать row.entity.propertyName
Ответ 5
Это работало для меня с ui-grid 4.0.7 и angular 1.6.6, мои свойства легко доступны в row.entity:
cellTemplate: '<div class="ngCellText">
<a href="Users/{{row.entity.userId}}">{{row.entity.name}}</a>
</div>'
(добавлены разрывы строк для ясности, удаляются при вставке)