【发布时间】: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