有一个关于Angularjs的问题,它是ng-repeat / ng-click的工作方式。
因此,在我正在使用的这个系统上,有很多代码重用于数据表,并且我正在尝试制作一个通用的模板/服务来对此进行补救。现在,我遇到了一个问题,就是我们有多个按钮,它们在被单击时带有各自的函数调用。
到目前为止,我已经完成了以下设置: 我的列对象定义为:
var columns = [
{
identifier: "id",
type: "text"
},
{
identifier: "type",
type: "text"
},
{
identifier: "label",
type: "text"
},
{
identifier: "actions",
type: "button",
multi: true,
content: [
{
icon: "fa-globe",
events: {
click: $scope.openMapModal
}
},
{
icon: "fa-list",
events: {
click: $scope.openGroupModal
}
}
]
}
];
我的HTML如下:
<tr ng-repeat="row in table.data" ng-model-instant>
<td ng-repeat="column in table.columns" ng-if="column.type === 'text'">
{{TableService.getByString(row, column.identifier)}}
</td>
<td ng-repeat="column in table.columns" ng-if="column.type === 'button' && column.multi">
<a ng-repeat="button in column.content" class="btn fa {{button.icon}}" ng-click="button.events.click(row)"></a>
</td>
</tr>
为了完整起见,我的TableService.getByString和一个小的表数据集: (请注意,上面定义的列是由函数设置到表对象中的,而我没有在对象中包括它。)
var table = {
data: [
{
id: 0,
label: "foo",
type: "bar"
},
{
id: 1,
label: "one",
type: "bar"
},
{
id: 2,
label: "foo",
type: "two"
}
]
}
function getKeyObj(obj, key) {
var retVal = {
"key": key,
"obj": obj
};
if (retVal.key.indexOf('.') > -1) {
var keyParts = retVal.key.split('.');
retVal.key = keyParts.pop();
while (keyParts.length && (obj = obj[keyParts.shift()])) ;
retVal.obj = obj;
}
return retVal;
}
function getByString(obj, key) {
var ret = getKeyObj(obj, key);
return ret.obj[ret.key];
}
现在我遇到的问题是,每当我单击按钮时,ng-click的函数都不会被调用。
我也尝试通过在我的列对象中将功能设置为字符串来尝试它,但是它也不起作用。
我是朝着正确的方向前进吗?还是我需要重新思考我的概括?如果是,那还有什么选择?
答案 0 :(得分:0)
您确定在定义columns数组时是否已定义$ scope.openMapModal吗?可能是您将undefined分配给click属性,而不是对该函数的引用吗?