11

次のコードを検討してください。

var app = angular.module("app", [], function($routeProvider) {
  $routeProvider
    .when("/page1", { controller: "MyController" })
    .when("/page2", { controller: "MyController" })
    .when("/page3", { controller: "MyController" });
});

app.factory("StrategyOne", function() {...});
app.factory("StrategyTwo", function() {...});
app.factory("StrategyThree", function() {...});

app.controller("MyController", function(Strategy, $scope) {...});

URL に応じて、を構築するときにStrategyOne、 またはStrategyTwo、 または のいずれかを注入する必要があります。アイデアを説明するための疑似コード:StrategyThreeMyController

var app = angular.module("app", [], function($routeProvider) {
  $routeProvider
    .when("/page1", { controller: "MyController", Strategy: "StrategyOne" })
    .when("/page2", { controller: "MyController", Strategy: "StrategyTwo" })
    .when("/page3", { controller: "MyController", Strategy: "StrategyThree" });
});

AngularJSでこのようなことを達成できる変更はありますか?

4

1 に答える 1

25

はい!AngularJSresolveは、ルート定義のプロパティに対してこれを非常に簡単に処理できます (詳細はこちら)。

したがって、基本的には次のように書くことができます。

var app = angular.module("app", [], function($routeProvider) {
  $routeProvider
    .when("/page1", { controller: "MyController", resolve: {Strategy: "StrategyOne"}})
    .when("/page2", { controller: "MyController", resolve: {Strategy: "StrategyTwo"}})
    .when("/page3", { controller: "MyController", resolve: {Strategy: "StrategyThree"}});
});

コントローラーに適切な戦略を注入するために!最高の AngularJS DI!

トピックを扱った非常に優れたビデオ チュートリアルがあります。resolve興味深いかもしれません: http://www.youtube.com/watch?v=P6KITGRQujQ&list=UUKW92i7iQFuNILqQOUOCrFw&index=4&feature=plcp

于 2012-10-23T18:59:11.630 に答える