$ routeParams没有填充

时间:2015-10-12 01:22:59

标签: javascript angularjs

有些我是路由和单页网页应用的新手,但我一直在尝试正确学习Angular。然而,我遇到了一些麻烦,还有一些奇怪的问题。我按照指南构建你的目录,我看起来像这样:

app/
    components/
        profile/
            profile.html
            ProfileModel.js
            ProfileController.js
            ProfileFactory.js
    app.module.js
    app.routes.js

我的主要模块位于app.module.js,依赖注入了ngRouteprofile.app(来自ProfileModel.js的个人资料视图模块)。声明如下:

angular
    .module('app', ['ngRoute', 'profile.app'])
    .controller('MainController', MainController);

function MainController() {
    this.message = 'This is the home page';
}

然后在我的app.routes.js文件中,我已经声明了应用程序需要的所有路由(到目前为止只有一个,这是配置文件):

angular
    .module('app')
    .config(routeConfig);

routeConfig.$inject = ['$locationProvider', '$routeProvider'];

function routeConfig ($locationProvider, $routeProvider) {
    $routeProvider
        .when('/user/:user_id', {
                templateUrl: '/app/components/profile/profile.html',
                controller: 'ProfileController',
                controllerAs: 'profile'
            }
        )
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    });
}

这是我的ProfileController.js

angular
    .module('app.profile')
    .controller('ProfileController', ProfileController);

ProfileController.$inject = ['ProfileFactory', '$routeParams'];

function ProfileController(ProfileFactory, $routeParams) {
    var vm = this;

    vm.user_id = $routeParams.user;

    console.log($routeParams.user_id);
    vm = ProfileFactory.userProfile(vm.user_id); //Gets the profile of the user and sets to to vm


}

所以我有两个主要问题。尽管我已在$routeParams.user_id中定义了路由,但app.routes.js仍未记录。这很奇怪,因为我的ng-view中有一个index.html指令(包含每个.js文件的HTML文件)。这意味着一旦控制器及其依赖项被实例化,我应该立即访问路由参数。但是,当我转到http://example.com/user/1时,我没有记录任何内容(未定义)。

我的第二个问题是我将ngRoute作为profile.app中的依赖项和我的主模块(其中profile.app是依赖项)包含在内。但是,我后来从ngRoute中删除了profile.app作为依赖项,但我在$routeParams内部注入ProfileController并且AngularJS根本没有抱怨。这似乎很奇怪,因为依赖关系不再明确地存在于profile.app中。那么,为什么我的$routeParams模块中没有ngRoute,我仍然可以注入profile.app?是因为它从主模块获得ngRoute吗?

1 个答案:

答案 0 :(得分:1)

我认为问题在于您正在设置controllerAs to 'profile'但是在控制器中您编写了var vm = this;

这两个必须相同才能写controllerAs: 'vm'var profile = this;