3

我正在尝试将路由应用于基于 Typescript 的 Angular 应用程序。该应用程序应该让 $routeProvider 注入如下代码:

var app = angular.module("MyApp", ["ui.bootstrap"]);
// app.service's and controller's here...

app.config(["$routeProvider",
    function ($routeProvider: ng.IRouteProvider) {
        $routeProvider
            .when("/", {
                controller: MyApp.Controllers.ItemsController,
                templateUrl: "/Items.html"
            })
            // ... other routes ...
            .otherwise({
                redirectTo: "/"
            });
}]);

无论如何,当我启动应用程序时,我从 Angular 中得到一个异常,告诉我它找不到名为$routeProviderProvider的提供程序:

Error: Unknown provider: $routeProviderProvider <- $routeProvider at Error (<anonymous>)
    at http://.../Scripts/angular.js:2734:15
    at Object.getService [as get] (http://.../Scripts/angular.js:2862:39)
    at http://.../Scripts/angular.js:2739:45
    at getService (http://.../Scripts/angular.js:2862:39)
    at invoke (http://.../Scripts/angular.js:2880:13)
    at Object.instantiate (http://.../Scripts/angular.js:2914:23)
    at $get (http://.../Scripts/angular.js:4805:24)
    at $get.i (http://.../Scripts/angular.js:4384:17)
    at forEach (http://.../Scripts/angular.js:137:20) undefined angular.js:5754

通过查看角度源(1.0.7),我可以看出这是因为在创建instanceInjector的第 2737 行,它的名称来自于将名为providerSuffix的变量附加到请求的提供者名称(此处为“$routeProvider”)。因此,这会导致异常。然而,正确的名称应该是“$routeProvider”;如果我在代码中将其更改为“$route”,则此错误会按预期消失,因为现在构建的名称是“$routeProvider”;但我得到另一个异常,告诉我服务“$route”没有定义。那么,我应该怎么做才能解决这个问题呢?

4

1 回答 1

2

更新的答案: 就像我在下面的评论中提到的

例如,它在控制器中是无效的。仅供参考,您所说的“ProviderProvider”部分仅用于记录,而不是如何在内部搜索依赖项

并在您的代码中找到:

export class MainController {
    static $inject = ["$scope", "$routeProvider"];

    constructor(private $scope: IMainScope,
        private $routeProvider: ng.IRouteProvider) {
    }
}

您的控制器中不能有 routeProvider。您的 app.config不是给您错误的原因。将您的控制器更改为,错误消失:

export class MainController {
    static $inject = ["$scope"];

    constructor(private $scope: IMainScope) {
    }
}

此外,我建议在使用控制器时不要实现自己的范围。原因如下:http ://www.youtube.com/watch?v=WdtVn_8K17E&feature=youtu.be&t=5m36s

希望你和我一样喜欢 angular + typescript :)

于 2013-08-07T16:34:34.807 回答