0

Angular Grid (ag-grid) を使用してデータを表示しています。私のテーブルでは、ユーザーがインライン編集でコメントを追加するたびに、残りの呼び出しを行い、DB にコメントを保存するつもりです。中に休憩コールを入れる$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
    });
}]);

些細な作業のようですが、基本的なものが欠けていると確信しています。

PS 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) {});},

しかし、問題は、このハンドラーを多くの場所に配置する必要があることです。このアプローチでは、多くのコードの重複が発生します。より良いアイデアはありますか?

4

2 に答える 2

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) {});
}
于 2015-11-09T07:45:47.443 に答える
1

メソッド宣言から $http を削除してください。Angular サービスをプライベート メソッドに挿入しようとしています!

于 2015-11-09T07:47:53.743 に答える