Angular Typescript:无法在控制器中注入$ filter

时间:2016-04-23 22:54:57

标签: angularjs dependency-injection typescript angularjs-controller angularjs-filter

我在我的指令中使用了一个控制器。我已经在控制器构造函数中声明了一个函数(change(searchAttribute:string)),它将在内部使用过滤器,但我得到运行时异常“这个。$ filter不是函数”。

我在谷歌上有很多例子以同样的方式注入$ filter服务,但我无法弄清楚为什么它对我不起作用。

我的代码:

$oauth = OAuth::consumer('QuickBooks');
$oauth_token = unserialize(file_get_contents(storage_path("tokens/saved_data.txt")));

$storage = $oauth->getStorage();
$storage->storeAccessToken('QuickBooks', $oauth_token['access_token']);

// Check for Quickbooks donor
$result = $oauth->request("/v3/company/" . $oauth_token['company_id'] . "/query?query=SELECT * FROM Customer MAXRESULTS 1", "GET");

return $result;

2 个答案:

答案 0 :(得分:1)

您正在尝试将this用于参考构造函数。但是,在另一个函数中,this引用了更改函数而不是构造函数。您需要在另一个变量之前使用点构造函数,例如self

让我们转到代码:

constructor(public $scope: MyDirectiveScope, public $filter: ng.IFilterService) {
    let self = this;

    $scope.change = function (searchAttribute) {
        $scope.myModel = self.$filter('filter')($scope.myModel, searchAttribute);
    };
}

答案 1 :(得分:1)

您可以使用Typescript arrow functionsthis作为上述函数中的类实例上下文:

$scope.change = (searchAttribute) => {
    $scope.myModel = this.$filter('filter')($scope.myModel, searchAttribute);
    // Here, this refers to your class instance context
};