Некоторые Я новичок в маршрутизации и одностраничных веб-приложениях, но я пытался правильно изучить 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
(файл HTML, который содержит каждый файл .js
). Это означает, что я должен иметь немедленный доступ к параметрам маршрутизации после создания экземпляра контроллера и его зависимостей. Однако, когда я перехожу на http://example.com/user/1, я ничего не регистрирую (неопределенный).
Мой второй вопрос: я включил ngRoute
как зависимость в profile.app
и мой основной модуль (в котором profile.app
- зависимость). Тем не менее, я позже удалил ngRoute
с profile.app
в качестве зависимости, но я оставил инъекцию $routeParams
внутри моего ProfileController
, и AngularJS не жаловался вообще. Это кажется странным, потому что зависимость больше не присутствует явно внутри profile.app
. Так почему же я все еще могу, кажется, ввести $routeParams
, несмотря на отсутствие ngRoute
в моем модуле profile.app
? Это потому, что он получает ngRoute
от основного модуля?
Проверьте, если вы сделали синтаксис ошибка в этой строке vm.user_id = $ routeParams.user; Должно ли это не быть vm.user_id = $ routeParams.user_id как определено на ваших маршрутах? –
Но почему это должно иметь значение? 'Console.log ($ routeParams.user_id)' logs undefined –
В этом случае это не имеет значения. Я просто думал, что vm.user_id не определено, потому что вы назначили ему неопределенную переменную. Попробуйте использовать мой ответ ниже и посмотрите, что произойдет. –