2

外部のjsonファイルからルーターを設定する必要があります

コンパイル エラーを含む例:

@RouteConfig([{
    path: '/dashboard', name: 'Dashboard', component: 'Dashboard'
}])

コンポーネントの注意:「ダッシュボード」 - 間違っています。コンポーネント フィールドは Type タイプである必要があります。別の方法は Router.config() メソッドを使用することですが、その使用方法がわかりません。やってみましたが、できませんでした。Anular2ルーターで可能ですか? angular1 では、コントローラー名を文字列値として指定できます。

4

2 に答える 2

1

シンプルな typescript デコレータを使用して問題を解決しました。

/***
 * Routing components storage
 * @type {Map<string, Function>}
*/
export var routingComponents = new Map<string, Function>();

/***
 * Decorator function
 * @returns {function(any): *}
 * @constructor
*/
export function RoutingComponent(name?: string) {
    return function (target:any) {
        routingComponents.set(name || target.name, target);
        return target;
    }
}

デコレータの使い方

@Component({ selector: '', template: '' })
@RoutingComponent()
export class Dashboard {
    constructor(){}
}

次に、 RouteDefinition インスタンスを作成できます

private makeRoute(metadataItem: any): RouteDefinition {
    let component = routingComponents.get(metadataItem.name);
    if (!component) {
        component = CleanComponent;
    }

    var route: RouteDefinition = {
        name: metadataItem.name,
        path: metadataItem.url,
        useAsDefault: metadataItem.default,
        component: component
    };

    return route;
}
于 2016-01-23T12:43:06.563 に答える
0

を使用する場合Router.config()は、次の手順に従います。

1) メイン コンポーネントで、ルートを変数で定義します。

  private myMainRoutes: RouteDefinition[] = [
    { path:      '',
      component: HomeCmp,
      name:      'HomeCmp'
    },
    { path:      'dashboard',
      component: DashboardCmp,
      name:      'DashboardCmp'
    },
    { path:      'error',
      component: ErrorCmp,
      name:      'ErrorCmp'
    },
    { path:      '**',
      redirectTo: ['ErrorCmp']
    }
  ];

2) Router dep を使用して、メイン コンポーネント コンストラクターでその変数を使用します。注入。

class MainCmp  {
  private myMainRoutes: RouteDefinition[] =  ... ; // from above

  constructor(private router_: Router) {
    router_.config(this.myMainRoutes);
  }
}

それが役に立てば幸い!

于 2016-01-21T09:49:38.680 に答える