11

を実装しようとしているnamed routesので、パス全体を記述する必要はありません (頻繁に変更されます)。

定義されたルートのリストを返すサービスと、オブジェクトを aroute に変換するフィルターを作成することで解決できると考えていました。

使用例は次のようになります。

<a ng-href="{id:1}|route:'detail'">Click here!</a>

name:'detail' をルート定義に追加すると、次の結果が生成されます。

<a href="#/detail/1/">Click here!</a>

これは非常に簡単だと思いますが、次のとおりです。

定義されたルートのリストを取得するにはどうすればよいですか?

を利用できると思ってrouteProviderいましたが、私の知る限り、アクセスできるパブリックメソッドや属性はありません。

4

1 に答える 1

12

これは非常に簡単です。

http://plunker.co/edit/GNZxcvK4hfQ9LrlSvasK?p=preview

Components.filter('url', function ($route) {
  function resolveRoute(options, route) {
    var parts = route.split('/');
    for (var i = 0; i < parts.length; i++) {
      var part = parts[i];
      if (part[0] === ':') {
        parts[i] = options[part.replace(':', '')];
        if (parts[i] == undefined) throw Error('Attribute \'' + part + '\' was not given for route \'' + route + '\'')
      }
    }
    return parts.join('/');
  }

  return function (options, routeName) {
    var routes = [];


    angular.forEach($route.routes,function (config,route) {
      if(config.name===routeName){
        routes.push(route);
      }
    });

    if (routes.length == 1) {
      return resolveRoute(options, routes[0]);
    }
    else if (routes.length == 0) {
      throw Error('Route ' + routeName + ' not found');
    }
    throw Error('Multiple routes matching ' + routeName + ' were found');
  }
});
于 2013-05-03T22:49:01.147 に答える