【问题标题】:AngularJS Typescript IRouteParamsService undefinedAngularJS Typescript IRouteParamsService 未定义
【发布时间】:2016-12-14 00:36:03
【问题描述】:

我正在使用角度路线。 基于this question,我尝试获取 URL 参数。

我收到以下错误: angular.js:13920 TypeError: Cannot read property 'zvar' of undefined $routeParams 似乎是未定义的。

我的路由配置: angular.module('app').config(['$routeProvider', function routes($routeProvider: ng.route.IRouteProvider) { $routeProvider .when('/', { templateUrl: 'views/start.html', }) .when('/calc/:zvar?', { templateUrl: 'views/calc.html', controller: 'app.controllers.calcCtrl' }) .otherwise({ redirectTo: '/' }); } ]);

我的网址:http://localhost:64025/#/calc?zvar=test123

构造函数中的访问:

interface IRouteParams extends ng.route.IRouteParamsService {
        zvar: string;
    }
export class calcCtrl implements IController {
        static $inject: string[] = ['$routeParams'];
        constructor(private $routeParams: IRouteParams) {
            this.zvar = $routeParams.zvar;
            console.log("Calc Controller: " + this.zvar);
        }
        zvar: string;
    }

完整的打字稿代码:http://codepen.io/alexmallinger/pen/qNQRGJ

编辑:将static $inject: string[] = ['$routeParams']; 行添加到我的代码中

【问题讨论】:

    标签: angularjs typescript angular-routing


    【解决方案1】:

    您应该注入$routeParams 服务。 $inject property annotation 可用于此:

    export class calcCtrl implements IController {
        static $inject:string[] = ['$routeParams'];
        constructor(private $routeParams: IRouteParams) {
            ...
        }
    }
    

    【讨论】:

    • 控制器注册了吗?
    • 是的。我在这里上传了完整的 Typescript 代码:codepen.io/alexmallinger/pen/qNQRGJ
    • 尝试在没有services数组的情况下注册控制器:angular.module('app.controllers').controller(controller, app.controllers[className]);
    • 谢谢!我发现了问题。在constructor(private $routeParams: any) { 中使用any 而不是IRouteParams
    • any - 应该不是问题.. 生成的 javascript 中也没有反映类型
    猜你喜欢
    • 2014-08-10
    • 2016-09-28
    • 1970-01-01
    • 2014-05-07
    • 2013-05-28
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多