2

我正在使用 Angular 动态创建另一个 Angular 应用程序。我想知道是否有办法动态注入路由。就像是

angular.module('app').controller('CreateCtrl', function ($scope,$routeProvider) {
  var count = 0;

  $scope.addPage = function(){  
    $routeProvider.when('/'+count, {
       templateUrl: 'views/created.html',
       controller: 'CreatedCtrl'
     });
    count++;
  };

});

我知道这段代码很愚蠢,但我希望它能传达我正在尝试做的事情。当用户与应用程序交互时,他/她将创建新的路线......这可能吗?

4

1 回答 1

0

有两种方法:

选项1

按照https://stackoverflow.com/a/13173667/17815中的建议直接修改路由对象

$route.routes['/dynamic'] = {templateUrl: 'dynamic.tpl.html'};

注意:您需要同时添加“/newurl”和“/newurl/”(带有斜杠)。查看角度代码:

this.when = function(path, route) {
routes[path] = extend({reloadOnSearch: true}, route);

// create redirection for trailing slashes
if (path) {
  var redirectPath = (path[path.length-1] == '/')
      ? path.substr(0, path.length-1)
      : path +'/';

  routes[redirectPath] = {redirectTo: path};
}

return this;
};

选项 2

您可以参考$routeProvider

var $routeProviderReference;
var app = angular.module('myApp', ['myApp.controllers']);

app.config(['$routeProvider', function($routeProvider) {
    $routeProviderReference = $routeProvider;
}]);

请参阅http://blog.brunoscopelliti.com/how-to-defer-route-definition-in-an-angularjs-web-app

这污染了全局命名空间,但您仍然使用接口来改变routes对象。我想这使它更容易维护。也许您可以尝试将其放入闭包中。

无论如何,请记住,您应该在提供程序中执行此操作以使应用程序健壮。“使用前定义”。

于 2013-08-14T11:23:49.517 回答