从角网格列定义调用角度函数

时间:2016-07-08 09:58:35

标签: angularjs

我正在开发angularJs应用程序,我需要从超链接点击调用角度函数。

这是我的代码

vm.gridOptions = {
        data: [],
        enableHorizontalScrollbar: 0,

        columnDefs: [
            {
                field: "LASTNAME",
                displayName: "Last Name",
                cellTemplate: "<div><a href='#' data-ng-click='vm.OpenUserProfilePage({{row.entity[\"USERID\"]}})'>{{row.entity[col.field]}}</a></div>"
            },
            { field: "FIRSTNAME", displayName: "First Name" }
        ]
    };

    vm.getEncryptedUserId = function (userId)
    {
        AdminManageService.getUserIdEncryptedText(userId).then(function (encryptedText)
        {
            return encryptedText;
        });
    }

    vm.OpenUserProfilePage = function(userId) {
        window.location = "/UserProfile.aspx?enkey=" + vm.getEncryptedUserId(userId);
    }

它在html中正确呈现

<a href="#" data-ng-click="vm.OpenUserProfilePage(89)" class="ng-binding">CHW</a>

我在vm功能之前尝试$event.preventDefault();但是没有用。

同样在控制台中我收到错误

Error: [$parse:syntax] http://errors.angularjs.org/1.4.3/$parse/syntax?p0=%7B&p1=invalid%20key&p2=…w.entity%5B%22USERID%22%5D%7D%7D)&p4=%7Brow.entity%5B%22USERID%22%5D%7D%7D)

点击它甚至不会转到OpenUserProfilePage方法

我正在使用带有角度版本的{ui grid:ui-grid - v3.0.4AngularJS v1.4.3

1 个答案:

答案 0 :(得分:0)

以下语法错误:

vm.OpenUserProfilePage({{row.entity[\"USERID\"]}})

在您的单元格模板中。应该是:

vm.OpenUserProfilePage(row.entity[\"USERID\"])

因为您无法将角度表达式与角度插值混合。例如,您无法执行以下操作:

<div ng-show="5 + {{myNumber}} === 8">

因为ng-show需要一个角度表达式:

<div ng-show="5 + myNumber === 8">

如果要根据此布尔表达式显示“是/否”:

<div>{{(5 + myNumber === 8) ? "True" : "No"}}</div>

您必须使用grid.appScope访问应用程序的范围。没有提供更多的JS和HTML,你没有帮助,但如果我做了一些有根据的假设,你必须这样做:

data-ng-click='grid.appScope.vm.OpenUserProfilePage(row.entity.USERID)'