мы надеемся, что некоторые столкнулись с моей проблемой раньше, это действительно странно. Я получаю странное поведение при использовании ExpressJS для локального использования файлов AngularApp.
У меня есть следующий оператор в моем основном контроллере (обертывание всего тела):
else{
console.log('Forwarding to Login');
$state.go('signin', {});
console.log($state.$current);
}
Он фактически вызван, но ничего не происходит, и текущее состояние пусто.
Теперь смешная часть: я просто установил nginx локально и указал корневой путь файла конфигурации по умолчанию в корневую папку проекта. Все работает.
Итак, что может заставить ExpressJS не перенаправлять и не загружать контроллер при использовании $ state.go? Использование ui-sref работает...
Здесь мой express.js config:
var express = require('express'); var app = express();
app.use('/libs', express.static(__dirname + '/libs')); app.use('/assets', express.static(__dirname + '/assets')); app.use('/app', express.static(__dirname + '/app')); //app.use(express.errorHandler());
app.set('port', process.env.PORT || 3000);
app.all('/*', function(req, res, next) {
// Just send the index.html for other files to support HTML5Mode
res.sendFile('index.html', { root: __dirname }); });
/** * Start Server */
var server = app.listen(3000, function () {
var host = server.address().address; var port = server.address().port;
console.log('X is listening at http://%s:%s', host, port);
});
Вот мои состояния
$stateProvider
// Dashboard
.state('dashboard', {
url: "/dashboard",
templateUrl: "/app/components/dashboard/dashboard.view.html",
data: {pageTitle: 'Home', pageSubTitle: 'MyTitle Workspace'},
resolve: {
deps: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load({
name: 'MyApp',
insertBefore: '#ng_load_plugins_before',
files: [
]
});
}]
}
})
// Login
.state('signin', {
url: '/signin',
templateUrl: '/app/components/login/login.view.html',
data: {pageTitle: 'Sign in', pageSubTitle: ''},
controller: 'LoginController',
controllerAs: 'loginCtrl',
resolve: {
deps: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load({
name: 'MyApp',
insertBefore: '#ng_load_plugins_before',
files: [
'/app/shared/authentication/login.controller.js'
]
});
}]
}
})
Я бы очень признателен за любую помощь :)
Лучший, Патрик
Не зная, как выглядит ваш маршрут, я рекомендую добавить следующее к вашему.run:
app.run(function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, next) {
/* Fired prior to any route change */
});
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
/* this will fire on EVERY successful route change */
});
/*
Logs to console if a route change fails for any reason
*/
$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {
console.log('state change error - ' + error + ' - to: ' + angular.toJson(toState) + ' params: ' + angular.toJson(toParams) + '\nfrom: ' + angular.toJson(fromState) + ' params: ' + angular.toJson(fromParams));
});
});
Это, по крайней мере, даст вам некоторое представление о том, что происходит. Вы даже можете справиться с проблемой непосредственно внутри этих блоков