4

ミスリルについて読み始めました。魅力的..最初に読んだ後、私を困惑させたことが1つだけあります。

あるコンポーネントを別のコンポーネント (最上位コンポーネント) 内にルーティングするにはどうすればよいですか? つまり、angulars ng-view または embers アウトレットをエミュレートするにはどうすればよいですか?

m.route を取得して、任意の dom ノードにコンポーネントをアタッチできることを理解しています。しかし、特に m("#view") を生成する最上位コンポーネント App をレンダリングし、他のすべてのルーティング可能なコンポーネントを App の #view div 内に配置するにはどうすればよいでしょうか? これは可能ですか?そうしないと、サブコンポーネントへのすべてのルート遷移にヘッダーとフッターを繰り返し含める必要がありますよね? 何か不足していますか?

ありがとうございました。

4

3 に答える 3

1

私は、グーグルで見つけたレオの提案のいくつかに行き着きました。

このソリューションでは「1層」のラップしか使用できず、名前付きアウトレットはありませんが、機能し、今のところ機能します。

結局のところ、Angular には ng-view が 1 つしかなく、人々はなんとかやってのけることができます。

これが外側のコンポーネントです。

var Layout = {
  controller(subcomp) {
    this.own = {
      slide: false
      };
    this.subctrl = new subcomp.controller();
    this.subview = subcomp.view;
  },
  view(ctrl) {
    return bubble(ctrl.own, ctrl.subview(ctrl.subctrl));
  },
  wrap(routes) {
    var map = {};
    Object.keys(routes).map((r) => {
      map[r] = {
        controller() {
          return new Layout.controller(routes[r]);
        },
        view: Layout.view
      };
    });
    return map;
  }
};

これは、コンポーネントを挿入する外側のビューです。

function bubble(vm, subview) {
  return m("main", [
    m("#outlet",[ subview ])
  ]);
}

次に、すべてのサブコンポーネントをレイアウト内にルーティングします。

m.route.mode = "pathname";
m.route(document.body, "/articles/create", Layout.wrap({
  "/articles/create": CreateArticle
}));

これが同じ状況の誰かに役立つことを願っています。

于 2015-07-13T04:00:53.083 に答える