有些我是路由和单页网页应用的新手,但我一直在尝试正确学习Angular。然而,我遇到了一些麻烦,还有一些奇怪的问题。我按照指南构建你的目录,我看起来像这样:
app/
components/
profile/
profile.html
ProfileModel.js
ProfileController.js
ProfileFactory.js
app.module.js
app.routes.js
我的主要模块位于app.module.js
,依赖注入了ngRoute
和profile.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
吗?
答案 0 :(得分:1)
我认为问题在于您正在设置controllerAs to 'profile'
但是在控制器中您编写了var vm = this;
这两个必须相同才能写controllerAs: 'vm'
或var profile = this;