ui.router 状态未按预期工作
ui.router state not working as expected
我正在使用 ui.router
来检测 Angular 应用程序中的状态变化。但是控制器没有在加载时被调用。
下面是我的 app.js
代码。
var admin = angular.module('admin',['admin.core']);
angular.module('admin.core', ['ui.router', 'satellizer', 'ngMaterial']);
admin.config(function($mdThemingProvider, $stateProvider,
$urlRouterProvider, $authProvider, $locationProvider){
$mdThemingProvider.theme('default').primaryPalette('light-blue', {
'default': '700',
'hue-1' : 'A200',
}).accentPalette('blue');
// Satellizer configuration that specifies which API route the JWT should be retrieved from
$authProvider.loginUrl = '/api/authenticate';
// Redirect to the auth state if any other states are requested other than users
$urlRouterProvider.otherwise('/admin/login');
console.log($stateProvider)
$stateProvider
.state('login', {
url: '/admin/login',
name: 'login',
controller: 'AuthController as auth',
})
.state('users', {
url: '/admin/users',
controller: 'UserController as user'
});
$locationProvider.html5Mode(true);
});
admin.controller('AuthController', AuthController);
function AuthController($auth, $state, $scope) {
console.log("Called");
var vm = this;
vm.login = function() {
var credentials = {
email: vm.email,
password: vm.password
}
console.log(credentials);
// Use Satellizer's $auth service to login
$auth.login(credentials).then(function(data) {
// If login is successful, redirect to the users state
$state.go('users', {});
});
}
}
AuthController
在我的状态为 login
时未被调用。
使用 $locationProvider.html5Mode(true);
时,您必须提供基本 href 位置。它会将您的状态 resolve url 解析为 http://localhost:8001/admin/#/login
并且应该可以解决您的问题。
尝试将 <base href="/" />
添加到主索引文件的 <head />
部分以指定应用程序的基本路径。
https://docs.angularjs.org/api/ng/provider/$locationProvider
同时在您的服务器上提供一个 .htaccess
文件,以始终将特定请求重定向到邮件索引页面。您可能需要稍微调整一下以适应您的结构。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Note that the mod_rewrite had to be enabled on my apache server. By
default it was disabled.
我正在使用 ui.router
来检测 Angular 应用程序中的状态变化。但是控制器没有在加载时被调用。
下面是我的 app.js
代码。
var admin = angular.module('admin',['admin.core']);
angular.module('admin.core', ['ui.router', 'satellizer', 'ngMaterial']);
admin.config(function($mdThemingProvider, $stateProvider,
$urlRouterProvider, $authProvider, $locationProvider){
$mdThemingProvider.theme('default').primaryPalette('light-blue', {
'default': '700',
'hue-1' : 'A200',
}).accentPalette('blue');
// Satellizer configuration that specifies which API route the JWT should be retrieved from
$authProvider.loginUrl = '/api/authenticate';
// Redirect to the auth state if any other states are requested other than users
$urlRouterProvider.otherwise('/admin/login');
console.log($stateProvider)
$stateProvider
.state('login', {
url: '/admin/login',
name: 'login',
controller: 'AuthController as auth',
})
.state('users', {
url: '/admin/users',
controller: 'UserController as user'
});
$locationProvider.html5Mode(true);
});
admin.controller('AuthController', AuthController);
function AuthController($auth, $state, $scope) {
console.log("Called");
var vm = this;
vm.login = function() {
var credentials = {
email: vm.email,
password: vm.password
}
console.log(credentials);
// Use Satellizer's $auth service to login
$auth.login(credentials).then(function(data) {
// If login is successful, redirect to the users state
$state.go('users', {});
});
}
}
AuthController
在我的状态为 login
时未被调用。
使用 $locationProvider.html5Mode(true);
时,您必须提供基本 href 位置。它会将您的状态 resolve url 解析为 http://localhost:8001/admin/#/login
并且应该可以解决您的问题。
尝试将 <base href="/" />
添加到主索引文件的 <head />
部分以指定应用程序的基本路径。
https://docs.angularjs.org/api/ng/provider/$locationProvider
同时在您的服务器上提供一个 .htaccess
文件,以始终将特定请求重定向到邮件索引页面。您可能需要稍微调整一下以适应您的结构。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Note that the mod_rewrite had to be enabled on my apache server. By default it was disabled.