【问题标题】:$http is not a function error in ag-grid$http 不是 ag-grid 中的函数错误
【发布时间】:2016-02-09 19:47:15
【问题描述】:

我正在使用 Angular Grid (ag-grid) 来显示数据。在我的表中,每当用户通过内联编辑添加评论时,我打算进行休息调用并将评论保存在数据库中。我已将$http 的东西放在newValueHandler 中进行休息。在调试器中,我看到 newValueHandler 被调用,但 $http 未定义。然后我得到错误:Uncaught TypeError: $http is not a function

function CompletedActionsCtrl($scope, $http) {
    var columnDefs = [{
        headerName: "Comments",
        field: "comments",
        width: 180,
        filter: 'text',
        editable: true,
        newValueHandler:addCommentHandler,
        valueGetter: function (params) {
            if (params.data.comments != null) {
                return params.data.comments[0];
            }
        }
    }]


function addCommentHandler(params,$http){
    var url = "./postComment";
    $http({method: 'GET',url: url
  }).then(function successCallback(response) {}, function errorCallback(response) {});}


//==Controller invoker==
var app = angular.module('app', ['ngRoute', 'agGrid']);
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/completed_actions', {
        templateUrl: 'completed_actions_partial.html',
        controller: CompletedActionsCtrl
    });
}]);

似乎是一项微不足道的任务,我确信我缺少一些基本的东西。

附: Javascript 和 angularjs 新手。

== 代码流程说明 == 当用户点击完成的操作选项卡时,CompletedActionsCtrl 被路由调用。在这个控制器内部,准备并渲染了一个网格。现在当用户编辑并提交评论时,newValueHandler 被调用,即function addCommentHandler

== 更新 == 通过定义一个匿名函数而不是调用私有函数作为处理程序来让它工作。

所以删除了这个 ->

newValueHandler:addCommentHandler,

并添加了这个 ->

newValueHandler:function(params){
                var url = "./postComment";
                $http({method: 'GET',url: url})
                    .then(function successCallback(response) {},
                        function errorCallback(response) {});},

但问题是我需要在很多地方都有这个处理程序,这种方法会导致大量代码重复。有更好的想法吗?

【问题讨论】:

  • 控制器代码在哪里,从哪里调用该函数?
  • 您是否尝试过将这些作为参数传递? controller: ["$scope", "$http", CompletedActionsCtrl($scope, $http)]
  • 是的。它不起作用。
  • 关注此链接可能对您有所帮助,它将apitoken 参数传递给另一个:docs.angularjs.org/guide/providers#service-recipe

标签: angularjs angular-grid ag-grid


【解决方案1】:

从您的函数中删除$http,您在addCommentHandler 函数上添加的参数正在消失$http 服务的存在。

代码

function addCommentHandler(params){ //<-- removed $http paramter function.
    var url = "./postComment";
    $http({method: 'GET',url: url
  })
  .then(function successCallback(response) {}, 
     function errorCallback(response) {});
}

【讨论】:

  • 谢谢。但我仍然收到错误消息。 Uncaught ReferenceError: $http is not defined
【解决方案2】:

从方法声明中删除 $http,您正在尝试将 Angular 服务注入私有方法!

【讨论】:

  • 谢谢。但我仍然收到错误消息。 Uncaught ReferenceError: $http is not defined
  • 要使用$http angularjs服务你需要在这个方法下将它注入到控制器中,请给我看控制器代码?
  • 谢谢!将其添加到 Qs 中。请看//==Controller invoker==下的代码和代码流程说明。
  • 我认为你的问题是你做控制器的方式,CompletedActionsCtrl 不知道 $http 是什么,请检查这个answer 如何声明控制器,然后在控制器的 []您可以注入像 $http 这样的 angularjs 服务并在您的函数中使用它们。
  • 但我在CompletedActionsCtrl 中注入$http。另外,如果我在这个控制器中使用$http,那么它也可以正常工作。问题是我不能在从CompletedActionsCtrl 调用的私有函数(在这种情况下为addCommentHandler)中使用$http
猜你喜欢
  • 2021-11-13
  • 2023-03-03
  • 2019-05-04
  • 2020-08-08
  • 1970-01-01
  • 2020-09-06
  • 2022-11-26
  • 2020-02-28
  • 2018-11-03
相关资源
最近更新 更多