提问人:Burnthor 提问时间:1/14/2016 更新时间:1/19/2016 访问量:1295
angular-datatables 在指令中。不能调用 withFnServerData() 中的函数
angular-datatables in a directive. Cant call function in withFnServerData()
问:
我有一个关于在 Angular 指令中调用函数的问题。下面是我的指令,我想在其中封装控制器的代码。从控制器中,我获取 URL 和列。dtOptions 在指令中设置。
到目前为止,这有效,并且表格出现。问题是 DTOptionsBuilder 不调用函数 serverData。当我在 FnServerData(serverData()) 中添加括号时,调用了该方法,但参数未定义。代码在控制器中定义时有效。
你看到一种有效的方法吗?
命令
angular.module('tab')
.directive('tabledirective', tableDirective);
function tableDirective(DTOptionsBuilder, DTColumnBuilder, RESTService){
return {
templateUrl: '../../views/tableTemplate.html',
restrict: 'E',
link: function (scope, elem, attr) {
var dtOption;
function serverData(sSource, aoData, fnCallback) {
//All the parameters you need is in the aoData variable
var draw = aoData[0].value;
var order = aoData[2].value;
var start = aoData[3].value;
var length = aoData[4].value;
var search = aoData[5].value;
//Then just call your service to get the records from server side
RESTService.get(scope.options.url, start, length, search, order, draw).success(function (result) {
var records = {
'draw': result.data.draw,
'recordsTotal': result.data.total,
'recordsFiltered': result.data.filtered,
'data': result.data.records
};
fnCallback(records);
});
};
dtOption = DTOptionsBuilder
.newOptions()
.withFnServerData(serverData)
.withBootstrap()
.withDataProp('data')
.withOption('processing', true)
.withOption('serverSide', true)
.withOption('paging', true)
.withPaginationType('full_numbers')
.withDisplayLength(10);
scope.options.dtoptions = dtOption;
}
};
}
控制器
angular.module('tab')
.controller('tableCtrl', tableCtrl);
function tableCtrl(DTColumnBuilder, DTOptionsBuilder, $scope){
$scope.options = {
dtcolumns: [
DTColumnBuilder.newColumn('Age', 'Alter'),
DTColumnBuilder.newColumn('Adresse', 'Adresse'),
DTColumnBuilder.newColumn('Name', 'Name')
],
dtoptions: '',
url: 'http://localhost:9000/api/Data/Get'
};
}
答:
0赞
Burnthor
1/19/2016
#1
我解决了问题。angular-datatables 已经提供了一个指令。要告诉 Angular 在作用域内渲染表格,你必须将元素附加到模板中声明的某个元素。<table>
随着$compile表在作用域中呈现
return {
template: '<div></div>',
restrict: 'E',
link: function (scope, elem, attr) {
var dtOption;
...
scope.options.dtoptions = dtOption;
elem.append('<table datatables=""...</table>');
$compile(elem.contents())(scope);
}
};
}
评论