【问题标题】:how to use angularjs (filter service) without html (for chrome extension)如何在没有 html 的情况下使用 angularjs(过滤服务)(用于 chrome 扩展)
【发布时间】:2015-11-29 05:06:02
【问题描述】:

我尝试在我的 chrome 扩展中使用过滤器 angularjs 服务。但我不知道如何在我的函数中获取/注入它。 目前我有:

chrome.contextMenus.onClicked.addListener(function(info, tab) {
    result = $filter('filter')(jsonArray, info.selectionText, function (actual, expected) {
        return actual.toString().toLowerCase().indexOf(expected.toLowerCase()) == 0;
    });
    console.log(sug);
});

但显然我有:$filter 没有定义。 我也想使用 $http 服务来获取我的 jsonArray

【问题讨论】:

  • 在函数所在的controller/provider/module中注入依赖
  • 我没有控制器/提供者/模块。我只想单独使用过滤器。
  • 您不需要所有的角度来过滤数组。它自 ES5 以来内置,请参阅 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 好的!但我也使用 $http 来获取我的 json 数组。所以一般来说如何在没有控制器/提供者/模块的情况下使用 angularjs 服务?

标签: javascript angularjs google-chrome-extension


【解决方案1】:

无论您在哪里使用 $filter,都需要为其添加依赖项。您可以通过将 $filter 作为参数提供给 main 函数来添加依赖项。

如果在控制器内部添加:

    .controller('MainCtrl', function($scope, $filter) {
      $scope.originalText = 'hello';
      $scope.filteredText = $filter('uppercase')($scope.originalText);
});

如果在工厂/服务中添加:

app.factory('myService', ['$filter', function($filter)

此链接可以帮助您获取更多信息: Inject dateFilter in a service in AngularJs

【讨论】:

【解决方案2】:

解决办法是:

var myInjector = angular.injector(["ng"]);
var $filter = myInjector.get("$filter");

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2021-11-10
相关资源
最近更新 更多