从ng-grid中的ng-click调用控制器内的函数不起作用

时间:2015-03-11 15:53:47

标签: angularjs angularjs-scope ng-grid

我在ng-click内的ng-grid内调用控制器内部的一个函数(listCtrl)时卡住了

asset.js.coffee

app = angular.module('asset',[]).namespace(true)
            app.controller 'linkCtrl', ['$scope','Restangular','asset.ProcServiceTools',($scope,Restangular,ProcServiceTools) ->  
              Restangular.all('asset').customGETLIST("linktogroup",{}).then (data) ->
                $scope.myData = data
                $scope.dynamicColumnDefs =ProcServiceTools.getIndexDynamicColumnDefs(data)
              $scope.customoptions = ProcServiceTools.getCustomOptions()
              $scope.linking = () ->
                console.log("checkout")
            ]
            app.service 'ProcServiceTools', () ->
              class Tools
                getIndexDynamicColumnDefs: (data) ->
                  return [
                    {field: 'id', displayName: 'ID' },
                    {field: 'asset_group_id', displayName: 'Group_ID' },
                    {field:'asset_catalog_id', displayName:'Catalog_id' },
                    {field: 'condition', displayName: 'Condition' },
                    {field: 'notes', displayName: 'Notes' },
                    {field: 'status', displayName: 'Status' },
                    {field: 'current_user_id', displayName: 'Current_user' },
                    {field: '' , cellTemplate: "<button  ng-click='linking()'>Link-to </button>"}]
                getCustomOptions: () ->
                  return {
                    showGroupPanel: true
                    jqueryUIDraggable: true
                    showSelectionCheckbox: true
                    showFooter: true
                    selectWithCheckboxOnly: true
                    enableColumnResize: true
                  }
              new Tools

这是我的asset.js文件...我已经在我的linkCtrl中注入了ProcServiceTools,并在此服务中调用了getIndexDynamicColumnDefs函数,数据为参数,并将其分配给$ scope.myData,我还添加了链接()到$ scope

这是我的

index.html.erb

<div ng-controller='asset.linkCtrl'>
<customgrid columndefs='dynamicColumnDefs' data='myData' dirclass='gridStyleTable' include-search='true' options='customoptions'></customgrid>

在这个文件中,我将数据设置为myData。我正在显示所有数据,按钮也会显示。我的问题是当点击链接到按钮时getIndexDynamicCoulmnDefs中的ng-click没有被触发...

但是当我在index.html.erb中插入一个按钮时,它会触发该函数。参见下面的代码。插入的按钮链接正在触发linking()

                <div ng-controller='asset.linkCtrl'>
                <customgrid columndefs='dynamicColumnDefs' data='myData' dirclass='gridStyleTable' include-search='true' options='customoptions'></customgrid>
            <button ng-click="linking()">link</button>
            </div>

我不知道为什么我不能从ng-grid中的ng-clik中调用控制器内的函数。

1 个答案:

答案 0 :(得分:0)

问题是因为我的用户定义的customgrid指令,我已经包含在index.html.erb中,它有自己的私有范围。所以我使用了ng-grid本身,并触发了该功能......

app = angular.module('asset', []).namespace(true);
            app.controller('linkCtrl', ['$scope', 'Restangular', function($scope, Restangular) {
                $scope.linking = function() {
                   console.log("check me out");
                };
                 Restangular.all('asset').customGETLIST("linktogroup", {}).then(function(data) {
                  $scope.myData = data;
                });
                    $scope.gridOptions = { 
                                data: 'myData',
                           columnDefs: [{field: 'id', displayName: 'ID' },
                                                {field: 'asset_group_id', displayName: 'Group_ID' },
                                                {field:'asset_catalog_id', displayName:'Catalog_id' },
                                                {field: 'condition', displayName: 'Condition' },
                                                {field: 'notes', displayName: 'Notes' },
                                                {field: 'status', displayName: 'Status' },
                                                {field: 'current_user_id', displayName: 'Current_user' },
                                                    {cellTemplate:'<button id="editBtn" type="button" class="btn btn-primary" ng-click="linking()" >Edit</button> '}]};

              }
            ]);

我的index.html.erb

    <div ng-controller='asset.linkCtrl'>
    <div class="gridStyle" ng-grid="gridOptions"></div>
    </div>

让我的事情发挥作用:)