在 ui-grid 中,我想为 colDef 的字段 属性 使用一个函数。如何将另一个函数作为参数传递给它?
In ui-grid, I want to use a function for the colDef's field property. How can I pass in another function as a parameter to it?
配置 Angular ui 网格时,您可以为每个列定义指定字段。您可以使用字符串指向 row.entity 中的正确字段,也可以使用函数。请参阅此 github 期以获取 quick 如何总结:https://github.com/angular-ui/ui-grid/issues/723
使用函数指定字段时,我可以传入字符串、对象和数组作为参数。但是,出于某种原因,当我传递另一个函数时它不起作用。事实上,定义字段的主要功能似乎根本没有执行。
Here is a plunkr 显示两个 table。最上面的列出了姓名和年龄,然后使用一个函数将两者组合在第三列中。只要您传入一个字符串(在本例中是年龄后面的“年”一词),它就可以正常工作。底部 table 显示了它传递 returns “年”的辅助函数的情况。 field: getNameAndAgeFunction(function(){return " years";})
在第二种情况下,getNameAndAgeFunction() 似乎从未执行过,单元格留空。关于如何传递函数的任何想法?更好的方法是从控制器的范围内传递该函数。非常感谢!
这是JS:
var app = angular.module('myApp', ['ui.grid']);
app.controller('MyCtrl', function($scope) {
$scope.myData = [
{name: "Moroni", age: 50},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34 }];
angular.forEach($scope.myData,function(row){
row.getNameAndAgeString = function(units){
return this.name + '-' + this.age + units;
}
});
angular.forEach($scope.myData,function(row){
row.getNameAndAgeFunction = function(fx){
return this.name + '-' + this.age + fx();
}
});
$scope.getUnits = function(){return " years"};
$scope.gridOptionsString = {
data: 'myData',
columnDefs: [{field: 'name', displayName: 'Name'},
{field:'age', displayName:'Age'},
{field: 'getNameAndAgeString(" years")', displayName: 'Name and age'},
]
};
$scope.gridOptionsFunction = {
data: 'myData',
columnDefs: [{field: 'name', displayName: 'Name'},
{field:'age', displayName:'Age'},
{field: 'getNameAndAgeFunction(function(){return " years";})', displayName: 'Name and age'},
]
};
});
这是由于 gridUtil.preEval
函数准备了您在字段属性中输入的字符串。
翻译成:
- foo.bar 到 foo['bar']
- foo.bar(arg) 到 foo'bar'
- foo.bar(function() {...}) 到 foo['bar(function() {}']
最后一个是你的情况,但结果字符串对我来说似乎无法评估(使用 angular $parse
方法)。
我正在查看它,它看起来像最后一个字符串:
foo.bar(function() {...})
只是与 $parse
方法不兼容。
我建议您使用自定义单元格模板,您仍然无法在 angular 表达式(带有大括号 {{ ... }} ) 但您可以访问更多变量,例如:
- grid.appScope:网格所在的范围。
- 行:带有自定义模板的单元格的行,row.entity 可以访问实体值。
- col:带有自定义模板的单元格的列,col.colDef 可以访问列定义
所以,我正在查看来自 OP 的 post linked 中的 plunkr,有几个脚本 links 被破坏了,所以这里有一个直接的 link 那些固定的:http://plnkr.co/edit/jAyqrKZ6gGa4Xrp7NRsq?p=preview
我会说我喜欢它的工作原理,使用字段 属性 中的函数字符串。但是我不喜欢我必须将该函数添加到每一行数据,尤其是在有 1000 行的情况下。
angular.forEach($scope.myData,function(row){
row.getNameAndAge = function(){
return this.name + '-' + this.age;
}
});
我还没有找到如何使用匿名函数执行此操作,但对我来说这看起来更清晰。
配置 Angular ui 网格时,您可以为每个列定义指定字段。您可以使用字符串指向 row.entity 中的正确字段,也可以使用函数。请参阅此 github 期以获取 quick 如何总结:https://github.com/angular-ui/ui-grid/issues/723
使用函数指定字段时,我可以传入字符串、对象和数组作为参数。但是,出于某种原因,当我传递另一个函数时它不起作用。事实上,定义字段的主要功能似乎根本没有执行。
Here is a plunkr 显示两个 table。最上面的列出了姓名和年龄,然后使用一个函数将两者组合在第三列中。只要您传入一个字符串(在本例中是年龄后面的“年”一词),它就可以正常工作。底部 table 显示了它传递 returns “年”的辅助函数的情况。 field: getNameAndAgeFunction(function(){return " years";})
在第二种情况下,getNameAndAgeFunction() 似乎从未执行过,单元格留空。关于如何传递函数的任何想法?更好的方法是从控制器的范围内传递该函数。非常感谢!
这是JS:
var app = angular.module('myApp', ['ui.grid']);
app.controller('MyCtrl', function($scope) {
$scope.myData = [
{name: "Moroni", age: 50},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34 }];
angular.forEach($scope.myData,function(row){
row.getNameAndAgeString = function(units){
return this.name + '-' + this.age + units;
}
});
angular.forEach($scope.myData,function(row){
row.getNameAndAgeFunction = function(fx){
return this.name + '-' + this.age + fx();
}
});
$scope.getUnits = function(){return " years"};
$scope.gridOptionsString = {
data: 'myData',
columnDefs: [{field: 'name', displayName: 'Name'},
{field:'age', displayName:'Age'},
{field: 'getNameAndAgeString(" years")', displayName: 'Name and age'},
]
};
$scope.gridOptionsFunction = {
data: 'myData',
columnDefs: [{field: 'name', displayName: 'Name'},
{field:'age', displayName:'Age'},
{field: 'getNameAndAgeFunction(function(){return " years";})', displayName: 'Name and age'},
]
};
});
这是由于 gridUtil.preEval
函数准备了您在字段属性中输入的字符串。
翻译成:
- foo.bar 到 foo['bar']
- foo.bar(arg) 到 foo'bar'
- foo.bar(function() {...}) 到 foo['bar(function() {}']
最后一个是你的情况,但结果字符串对我来说似乎无法评估(使用 angular $parse
方法)。
我正在查看它,它看起来像最后一个字符串:
foo.bar(function() {...})
只是与 $parse
方法不兼容。
我建议您使用自定义单元格模板,您仍然无法在 angular 表达式(带有大括号 {{ ... }} ) 但您可以访问更多变量,例如:
- grid.appScope:网格所在的范围。
- 行:带有自定义模板的单元格的行,row.entity 可以访问实体值。
- col:带有自定义模板的单元格的列,col.colDef 可以访问列定义
所以,我正在查看来自 OP 的 post linked 中的 plunkr,有几个脚本 links 被破坏了,所以这里有一个直接的 link 那些固定的:http://plnkr.co/edit/jAyqrKZ6gGa4Xrp7NRsq?p=preview
我会说我喜欢它的工作原理,使用字段 属性 中的函数字符串。但是我不喜欢我必须将该函数添加到每一行数据,尤其是在有 1000 行的情况下。
angular.forEach($scope.myData,function(row){
row.getNameAndAge = function(){
return this.name + '-' + this.age;
}
});
我还没有找到如何使用匿名函数执行此操作,但对我来说这看起来更清晰。