具有依赖关系的Angular Typescript过滤器

时间:2015-07-27 02:57:43

标签: angularjs typescript angular-filters

我试图弄清楚如何在打字稿中写一个角度滤镜(这是绊倒我的部分)一些注射。

这是我到目前为止所做的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="@drawable/olp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />

    <SlidingDrawer
        android:id="@+id/slidingDrawer1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="15dp"
        android:content="@+id/content"
        android:handle="@+id/handle" >


      <android.support.v4.view.ViewPager
          android:id="@+id/handle"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_centerInParent="true" />

        <LinearLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="#FFF000" >

            <ListView
                android:id="@+id/listView1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                 >
            </ListView>
        </LinearLayout>
    </SlidingDrawer>

</RelativeLayout>

我需要注入export function StrLimit() { return function(input, limit) { if (input.length <= limit) { return input; } return $filter('limitTo')(input, limit) + '...'; } } angular.module('myApp').filter('strLimit', StrLimit); ,我想为此使用原生TS。关于如何做到这一点的任何想法?

编辑:我已经看过this question's answer有关此主题的内容,但使用模块似乎很草率,特别是因为以上所有内容已经嵌套在模块中。 < / p>

2 个答案:

答案 0 :(得分:4)

在我的项目中,我们使用$inject属性,如下所示:

export function StrLimit($filter) {
  return function(input, limit) {
    if (input.length <= limit) {
      return input;
    }
    return $filter('limitTo')(input, limit) + '...';
  }
}
StrLimit.$inject = ['$filter'];

angular.module('myApp').filter('strLimit', StrLimit);

如果你有一个打字稿类,它将是public static var $inject = ['$filter'];

答案 1 :(得分:1)

在过滤器的注册中注入$ filter属性让它对我有用:

export class TableStrictFilter{
    public static Factory($filter:ng.IFilterService) {
        return (input:any, predicate:any) => {
            return $filter('filter')(input, predicate, true);
        }
    }
}

注册过滤器:

.filter('tableStrictFilter',['$filter', TableStrictFilter.Factory]);