在AngularJS服务上调用JavaScript函数

时间:2014-04-23 23:11:54

标签: javascript angularjs kibana

我正在为Kibana制作一个自定义面板。 Kibana使用AngularJS。有一种叫做“过滤器”的服务。该服务的代码可以是seen here。我正试图从我的面板动态添加过滤器。据我所知,我认为我可以这样做:

var n = getName();
var filter = {
  alias: 'My Filter',
  editing: false,
  query: 'name:"' + n + '"',
  type: 'querystring'
};
$scope.dashboard.current.services.filter.set(filter, null, true);

不幸的是,这种方法似乎不起作用。相反,我收到的错误是:

TypeError: undefined is not a function 

经过一番调查后,我已经确定了问题,即set似乎不是过滤器对象的函数。当我运行console.log($scope.dashboard.current.services.filter);

时,我没有看到它列出

我很困惑。当我查看服务本身的代码时,我可以清楚地看到一个set方法。然而,它没有在console.log中列出。我在这里误解了什么吗?有没有办法在过滤服务上调用set函数?如果是这样,怎么样?

谢谢!

1 个答案:

答案 0 :(得分:1)

看起来您可能错误地使用了服务,因为它们是注入$scope上通常不可用的对象。要使用过滤器服务,您可以执行以下操作:

// inject the filter service into your controller
myModule.controller('MyCtrl', ['filterSrv', function(filterSrv){
    // create your filter object and add it
    var n = getName();
    var filter = {
        alias: 'My Filter',
        editing: false,
        query: 'name:"' + n + '"',
        type: 'querystring'
    };
    filterSrv.set(filter, null, true);        
}]);