【问题标题】:How to inject service into gridApi event?如何将服务注入 gridApi 事件?
【发布时间】:2015-12-13 00:23:07
【问题描述】:

我的控制器中有一个 ng-resource 服务(我们称之为 Items):

app.factory("Items", function($resource) {
    return $resource("/api/items/:id");
});

想要使用我的 Items 服务发出 POST 请求以保存编辑:

$scope.items_grid.onRegisterApi = function(gridApi, Items) {
        $scope.gridApi = gridApi;
        gridApi.edit.on.afterCellEdit($scope, function(rowEntity, colDef, newValue, oldValue) {
            $scope.$apply();
            var field = colDef['name'];
            Items.get({'id':rowEntity._id.$oid}, function(item) {
                item[field] = newValue;
                item.$save;
            }); 
        });
    };

但在控制台上我得到了TypeError: Cannot read property 'get' of undefined

如何在 afterCellEdit 事件中正确注入我的服务?

【问题讨论】:

    标签: angularjs angular-ui-grid angularjs-resource


    【解决方案1】:

    您收到此错误是因为 onRegisterApi 函数不支持依赖注入并且 Items 等于 undefined 或其他内容(尝试在控制台中登录)...

    您可以使用$injector 或将它们声明为函数参数来检索依赖项,但仅限于实现 IoC 的地方...

    如果您无法访问其中任何一个,至少,您可以执行以下操作: var Items = angular.element(document.body).injector().get('Items');


    请发布您的完整控制器脚本以获得更优雅的答案。

    【讨论】:

      【解决方案2】:

      您应该将Items 注入您的控制器,而不是将其作为函数参数传递。

      依赖是从控制器函数中注入的,而不是从函数参数中注入的。基本上你需要在$scope.items_grid.onRegisterApi所属的角度controller中注入Items服务依赖项。

      控制器

      app.controller('myCtrl', function($scope, Items){ //<--inject items dependency here
      
         //you controller code
      
         $scope.items_grid.onRegisterApi = function(gridApi) { //<-- removed Items from here
              $scope.gridApi = gridApi;
              gridApi.edit.on.afterCellEdit($scope, function(rowEntity, colDef, newValue, oldValue) {
                  $scope.$apply();
                  var field = colDef['name'];
                  Items.get({'id':rowEntity._id.$oid}, function(item) {
                      item[field] = newValue;
                      item.$save; //this line seems doubtful
                  }); 
              });
          };
      
      })
      

      【讨论】:

      • @Paul Serikov 有帮助吗?
      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多